Контроль доступа применяется к именам, а не к объектам.Например,
class C {
private:
int value;
public:
int & getValue() { return value; }
};
Вы не можете получить доступ к имени value
, но вы можете получить доступ к объекту, к которому value
относится через getValue()
.
В коде
Base * b = new Derived();
b->function();
вы используете имя function
из Base
и оно является общедоступным.Таким образом, вы можете получить к нему доступ.С другой стороны,
Derived * d = new Derived();
d->function();
будет ошибкой компиляции, потому что вы используете function
из Derived
, который является приватным.