num1 = 2; int result = obj.add (); Cout return 0; } La deuxième ligne dans la fonction principale est faux parce que, à cette ligne, principales tente d'accéder (utilisation comme identificateur) du membre privé, num1. Le spécificateur d'accès protégé Si un membre d'une classe est public, il peut être accédé par une fonction externe, y compris une classe dérivée. Si un membre d'une classe est privée, il ne peut être accédé par une fonction externe; même une classe dérivée ne peut pas y accéder.
La question est, si une classe dérivée pas vraiment être en mesure d'accéder à un membre privé de sa classe de base (depuis la classe de la classe et de la base dérivée sont liés)? Eh bien, pour résoudre ce problème vous avez un autre spécificateur d'accès appelé, protégé. Si un membre d'une catégorie est protégé, il peut être accédé par une classe dérivée, mais il ne peut pas être accédé par une fonction externe. Il peut également être consulté par les membres au sein de la classe.
Le code suivant illustre comment une classe dérivée peut accéder à un membre protégé d'une classe de base: #include using namespace std; Calculatrice de classe {protected: int num1; int num2; }; classe ChildCalculator: Calculatrice {public: int add () {num1 = 2; num2 = 3; int somme = num1 + num2; retourner somme; }}; int main () {ChildCalculator myChildObj; int result = myChildObj.add (); Cout return 0; } La classe de base a seulement deux propriétés et aucune méthode; ces propriétés sont protégés. La classe dérivée a une méthode et pas de propriété.
L'intérieur de la classe dérivée, les propriétés protégées de la classe de base sont utilisés comme identificateurs. En général, quand une classe dérivée utilise un membre d'une classe de base, elle est une méthode de la classe dérivée qui utilise l'élément, comme dans cet exemple. Le code ci-dessus est OK. Le code suivant ne compilera pas, parce que la ligne 2 dans la foncti