Bei der Verwendung einer Klasse gibt es keinen Unterschied zwischen geschützten und privaten Mitgliedern. Beide sind für nichts zugänglich, das die Klasse nutzt.
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
}
Der Unterschied tritt auf, wenn Sie von einer Klasse mit geschützten Elementen erben.
Alle privaten Mitglieder einer Basisklasse sind weiterhin privat und für die abgeleitete Klasse nicht zugänglich. Die geschützten Member sind andererseits für die geerbte Klasse zugänglich, sind aber außerhalb der geerbten Klasse immer noch nicht zugänglich.
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
}
Vielen Dank! Ich sehe meinen Fehler jetzt –