Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_ООП.docx
Скачиваний:
5
Добавлен:
18.09.2019
Размер:
114.62 Кб
Скачать

30. Наследование клаССов и производные клаССы.

Важнейшим свойством ООП является наследование. Например, есть класс с определенными свойствами. В целом он нас устраивает, но необходимо добавить некоторую функциональность. Можно создать новый класс на основе существующего через наследование. Исходный класс называют предок/родитель/базовый класс/parent, а новый класс - наследник/потомок/производный класс/derived/child.

Производный класс обладает всеми свойствами и методами предка (он их унаследовал), плюс добавляются новые, может быть базовым для других классов. Так строится иерархия классов – важное понятие ООП.

При необходимости в производном классе можно перекрыть (переопределить) свойства и методы базового класса.

Форма записи заголовка производного класса:

class <наследник> : <режим доступа> <базовый класс> {<…>}

class B : public A // класс B наследует классу A, класс B выведен из A

{

// реализация B, расширяющая возможности А

}

Режимы доступа: внешнее, защищенное и внутреннее наследование:

Режим доступа public – внешнее наследование - интерфейс базового класса (раздел public) становится внешним интерфейсом производного класса (применяется чаще всего).

Режим доступа protected – защищенное наследование - внешний и защищенный разделы базового класса становится защищеными разделами производного класса, т.е. доступны только при следующем наследовании.

Режим доступа private – внутреннее наследование - внешний и защищенный разделы базового класса становится внутренними разделами производного класса, недоступны снаружи.

31. Конструкторы, деструкторы и наследование.

­­ Базовый класс, производный класс или оба класса вместе могут иметь конструкторы и/или деструкторы.

Если у базового и у производного классов имеются конструкторы и деструкторы, то конструкторы выполняются в порядке наследования, а деструкторы - в обратном порядке. Таким образом, конструктор базового класса выполняется раньше конструктора производного класса. Для деструкторов правилен обратный порядок: деструктор производного класса выполняется раньше деструктора базового класса.

Синтаксис передачи аргументов из производного в базовый класс показан ниже:

конструктор_произв_класса(список-арг) : базов_класс (список_арг) {

// тело конструктора производного класса

Для базового и производного классов допустимо использовать одни и те же аргументы. Кроме этого, для производного класса допустимо игнорирование всех аргументов и передача их напрямую в базовый класс.

В этой очень короткой программе показано, в каком порядке выполняются конструкторы и деструкторы базового и производного классов:

#include <iostream>

using namespace std;

class base {

public:

base() { cout ≪ "Работа конструктора базового класса \n"; }

~base ( ) { cout ≪ "Работа деструктора базового класса \n"; }

};

class derived: public base (

public:

derived() ( cout ≪ "Работа конструктора производного класса\n";}

~derived () ( cout ≪ "Работа деструктора производного класса\n";}

};

int main ()

{

derived о;

return 0;

}

После выполнения программы на экран выводится следующее:

Работа конструктора базового класса

Работа конструктора производного класса

Работа деструктора производного класса

Работа деструктора базового класса

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]