- •Закрытое наследование
- •Закрытое наследование
- •Композиция или закрытое наследование?
- •Пример
- •Защищенное наследование
- •Пример
- •Вложенные классы
- •Пример
- •Пример
- •Назначение PIMPL
- •Недостатки PIMPL
- •Реализация PIMPL
- •Пример (ComplexClass.h)
- •Основное преимущество
- •Оператор dynamic_cast
- •Пример 1 - указатели
- •Пример 1 - указатели
- •Пример 1 - указатели
- •Пример 1 - указатели
- •Пример 2 - ссылки
- •Пример 2 - ссылки
Защищенное наследование
Защищенное наследование – это наследование реализации, доступной для последующего наследования.
◦Призащищенномнаследованииоткрытыеполяи методыродительскогоклассастановятся защищеннымиполямииметодамипроизводного.
◦Данныеметодымогут использоватьсяклассами, порожденнымиотпроизводного.
◦Какивслучаезакрытогонаследования порожденныйклассдолжен предоставить собственныйинтерфейс.
Пример
class IntArray { public:
int getValue(int index)const; void setValue(int index, int v); int getLength()const;
private:
...
};
class IntStack : protected IntArray { public:
void push(int element); int pop();
bool isEmpty()const;
};
class IntStackEx : public IntStack { public:
// Расширяем интерфейс IntStack
};
Сравнениетиповнаследования в
C++
|
Публичное |
|
Защищенное |
|
Закрытое |
|
|
|
|
|
|
Base |
Child : public Base |
|
Child: protected |
|
Child: private Base |
|
|
|
Base |
|
|
public: public:
protected: private:
protected: protected:
private: |
недоступно |
недоступно |
недоступно |
|
Public, private |
|
Public, private |
|
Public, private |
(с)МарГТУ |
& protected |
|
& protected |
|
& protected |
|
|
|
|
|
Типынаследования вдругих языкахООП
Публичное наследование является наиболее естественным вариантом наследования и поддерживается всеми ОО языками программирования.
Другиетипы наследования являются, скорее,экзотикой, т.к.практически всегда можнообойтись без них:
◦вместоприватногонаследованияиспользуют композицию;
◦защищенноенаследование– вбольшинстве случаевне имеетсмысла.