add (); cout return 0; } La segunda línea en la función principal es equivocada porque en esa línea, los principales intentos de acceso (uso como identificador) del miembro privado, num1. El especificador de acceso protegidos Si un miembro de una clase es pública, se puede acceder a una función externa que incluye una clase derivada. Si un miembro de una clase es privado, no se puede acceder por una función externa; incluso una clase derivada no puede acceder a ella.
La pregunta es, si una clase derivada no es realmente ser capaz de acceder a un miembro privado de su clase base (ya que la clase y la base de clase derivada están relacionados)? Bueno, para resolver este problema tiene otro especificador de acceso llamada, protegido. Si un miembro de una clase esté protegido, se puede acceder por una clase derivada, pero no se puede acceder por una función externa. También se puede acceder por los miembros dentro de la clase.
El código siguiente muestra cómo una clase derivada puede acceder a un miembro protegido de una clase base: #include using namespace std; clase Calculadora {protected: int num1; int num2; }; clase ChildCalculator: Calculadora pública {public: int add () {num1 = 2; num2 = 3; int suma = num1 + num2; volver suma; }}; int main () {ChildCalculator myChildObj; int resultado = myChildObj.add (); cout return 0; } La clase base tiene sólo dos propiedades y ningún método; estas propiedades están protegidos. La clase derivada tiene un método y sin propiedad.
Dentro de la clase derivada, las propiedades protegidas de la clase base se utilizan como identificadores. Generalmente, cuando una clase derivada está utilizando un miembro de una clase base, que es un método de la clase derivada que está utilizando el miembro, como en este ejemplo. El código anterior es correcto. El siguiente código no se compilará, porque la línea 2 en la función main () intenta acceder a un miembro protegido de la clase base: #include using namespace std; clase Calcula