лекции программирование / polevoy_cpp_2012_spring_lecture_08
.pdfФункции, которые не наследуются
•конструкторы и деструкторы
•operator=
31.03.2012 |
cppNewb.ru |
31 |
Конструктор копирования при наследовании (пример)
Der::Der(const Der& copy)
: Base(copy)
// инициализация полей экземпляра
{
//дополнительная работа
//конструктора
}
31.03.2012 |
cppNewb.ru |
32 |
Оператор присваивания при наследовании (пример)
Der&
Der::operator=(const Der& copy)
{
CBase::operator=(copy);
// остальная работа оператора
}
31.03.2012 |
cppNewb.ru |
33 |
Статические функции (при наследовании)
•наследуются производными классами
•переопределение скрывает все
остальные перегруженные версии в
базовом классе
•т.е. аналогично обычным функциям
31.03.2012 |
cppNewb.ru |
34 |
Выбор между композицией и наследованием
•композиция (b содержит a)
–отношение “has-a”
–повторное использование кода
•наследование (b является a)
–отношение “is-a”
–повторное использование интерфейса
31.03.2012 |
cppNewb.ru |
35 |
Закрытое наследование
•лучше использовать композицию
•реализует “ограниченную реализацию”
•пользователь не имеет доступа к базовой функциональности
•экземпляр производного класса не может интерпретироваться как экземпляр базового класса
31.03.2012 |
cppNewb.ru |
36 |
Закрытое наследование (пример)
// in base.h |
// in der.h |
class Base |
class Der |
{ |
: private CBase |
public: |
{ |
int aF(); |
using CBase::aF; |
int aF(int a); |
using CBase::bF; |
void bF(); |
… |
… |
}; |
}; |
|
31.03.2012 |
cppNewb.ru |
37 |
Защищенность
•ключевое слово protected
•защищенный член ведет себя как
–открытый для членов производных классов
–закрытый для всех остальных функций
31.03.2012 |
cppNewb.ru |
38 |
Защищенное наследование
•реализует
–открытую реализацию для производных и дружественных классов
–“ограниченную реализацию” для других
классов
•на практике используется редко
31.03.2012 |
cppNewb.ru |
39 |
Матрица доступа
|
методы и |
методы и |
пользов |
|
друзья |
друзья |
атели |
|
класса |
производных |
|
|
|
|
|
|
|
|
|
public |
есть |
есть |
есть |
|
|
|
|
protected |
есть |
есть |
нет |
|
|
|
|
private |
есть |
нет |
нет |
|
|
|
|
31.03.2012 |
cppNewb.ru |
40 |