
Часто люди путаются с ограничениями, которые накладывают ключевые слова public, protected и private при наследовании классов в C++. Ниже приведен код, который наглядно иллюстрирует различия с правами доступа.
class A
{
public:
int x; // доступно извне класса
protected:
int y; // недоступно извне класса, но доступно в методах наследника
private:
int z; // недоступно извне класса и в методах наследника
};
class B : public A
{
// тут x будет public
// тут y будет protected
// z недоступен в B
};
class C : protected A
{
// тут x будет protected
// тут y будет protected
// z недоступен в C
};
class D : private A
{
// тут x будет private
// тут y будет private
// z недоступен в D
};
Стоит иметь ввиду, что если ничего не указывать при наследовании классов, то по умолчанию используется private. При наследовании структур умолчания другие — там будет public.