2016-05-21 3 views
0
class A{ 
fct1(){}; 
}; 

class B:public A{ 
fct2(){}; 
}; 
// B b; 
// A* a = &b; good! possible!! 

class A{ 
fct1(){}; 
}; 
class B:protected A{ 
fct2(){}; 
}; 
//B b; 
// A* a=&b; error! 

pourquoi est-ce? Qu'est-ce que l'héritage protégé a à voir avec le pointeur?Pourquoi le pointeur de type base ne peut-il pas prendre la valeur d'adresse de l'objet de classe dérivé?

J'ai appris que l'héritage protégé change la zone publique en zone protégée, de sorte que seule la classe dérivée peut accéder à ses fonctions et variables membres. :(

S'il vous plaît expliquer le principe et la raison.

Répondre

0

Le point entier de contrôle d'accès est de ... contrôle qui a accès à quelles parties d'une classe. « Protégées » signifie que les classes dérivées ne sont

Le niveau d'accès d'une classe de base détermine l'accès au sous-objet de base, ce qui signifie que seules les classes dérivées ont accès aux sous-objets de base protégés. classes externes dérivées de A

+0

Ensuite, je ne peux pas construire le polymorphisme avec l'héritage protégé? –

+0

et subobject signifie quelque chose comme fct1 en classe? J'ai appris le C++ en coréen: P –

+0

"Polymorphisme" est un mot dangereusement vague. Habituellement, le "polymorphisme dynamique" (ou "polymorphisme de la fonction virtuelle") fait référence à l'héritage ** public **. Dans cette interprétation du polymorphisme, vous voulez traiter un 'B' * comme si c'était un' A', donc le sous-objet de base doit être public. –