Al utilizar una clase, realmente no hay diferencia entre los miembros protegidos y privados. Ninguno de los dos está disponible para nada que utilice la clase.
class A {
private: int privateNum;
protected: int protectedNum;
public: int publicNum;
void SetNumbers(int num) {
privateNum = num; //valid, private member can be accessed in member function
protectedNum = num; //valid, protected member can be accessed in member function
}
void main() {
A classA;
classA.privateNum = 1; //compile error can't access private member
classA.protectedNum = 1; //compile error can't access protected member
classA.publicNum = 1; //this is OK
classA.SetNumbers(1); //this sets the members not accessible directly
}
La diferencia entra en vigencia cuando hereda de una clase con miembros protegidos.
class B : public A {
}
Todos los miembros privados de una clase base siguen siendo privados y no serán accesibles para la clase derivada. Los miembros protegidos, por otro lado, son accesibles para la clase heredada, pero todavía no son accesibles fuera de la clase heredada.
class B : public A {
public:
void SetBNumbers(int num) {
privateNum = num; //compile error, privateNum can only be accessed by members of A, not B
protectedNum = num; //this works, as protected members can be accessed by A and B
}
}
void main() {
B classB;
classB.publicNum = 1; //valid, inherited public is still public
classB.protectedNum = 1; //compile error, can't access protected member
classB.privateNum = 1; //compile error, B doesn't know that privateNum exists
classB.SetBNumbers(1); //this sets the members not accessible directly
}
¡Gracias! Veo mi error ahora –