вторник, 8 декабря 2015 г.

О типах наследования в C++



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