Часто люди путаются с ограничениями, которые накладывают ключевые слова 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.