Разберем разные комбинации доступа при наследовании.
class A
{
private:
int priv;
public:
int pub;
A(): priv(0),pub(1),prot(2) {}
protected:
int prot;
};
class Apub: public A
{
};
class Apriv: private A
{
};
void main()
{
A a;
Apub apub;
Apriv apriv;
cout<<a.priv<<endl; //Ошибка
cout<<a.pub<<endl;
cout<<a.prot<<endl; //Ошибка
cout<<apub.priv<<endl; //Ошибка
cout<<apub.pub<<endl;
cout<<apub.prot<<endl; //Ошибка
cout<<apriv.priv<<endl; //Ошибка
cout<<apriv.pub<<endl; //Ошибка
cout<<apriv.prot<<endl; //Ошибка
}
В этом примере разобраны ситуации, в которых мы получаем ошибки компиляции.