Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Магистратура Языки программирования С,C++ / Презентация №8 Наследование, перегрузка, переопределение.pptx
Скачиваний:
1
Добавлен:
17.03.2024
Размер:
4.93 Mб
Скачать

Языки программирования С/C++

Наследование в С++

01

Содержан

ие

01

Наследование-

Типы наследования. Множественное и

02

ромбовидное наследование. Их проблематика

типов-

 

Неявное приведение

 

Определение и цели использования.

 

Особенности protected

03

Перегрузка-

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

04

Переопределение методов-

Требования для переопределения функции.

 

Привязка вызова функции к объектам класса

05

Виртуальные методы-

Понятие виртуальных методов. Таблица виртуальных методов. Виртуальные методы в конструкторе и деструкторе.

Класс А

 

Класс В

 

 

 

Класс С

Публичный

Наследование 01

Наследование — это способ организовывать иерархии классов. При этом класс-наследник приобретает поля и функции базового класса, модифицируя их область видимости.

Класс, который наследует данные, называется подклассом (subclass), производным классом (derived class) или дочерним классом (child). Класс, от которого наследуются данные или методы, называется суперклассом (super class), базовым классом (base class) или родительским классом (parent). Термины “родительский” и “дочерний” чрезвычайно полезны для понимания наследования.

Типы

наследования

Защищенный

Приватный

3

Метод turn_on()

4

Приватные данные

Для базового класса Device, уровень доступа к данным не изменяется, но поскольку производный класс Computer наследует данные как приватные, данные становятся

приватными для класса Computer.

5

Множественное наследование

#include <iostream> using namespace std;

class Computer

{

public:

void turn_on()

{

cout << "Welcome to Windows 95" << endl;

}

};

class Monitor

{

public:

void show_image()

{

cout << "Imagine image here" << endl;

}

};

class Laptop : public Computer, public Monitor {};

int main()

{

Laptop Laptop_instance; Laptop_instance.turn_on(); Laptop_instance.show_image(); return 0;

}

Множественное наследование происходит, когда подкласс имеет два или более суперкласса. В этом примере, класс Laptop наследует и Monitor и Computer одновременно.

6

Проблематика множественного наследования

Множественное наследование требует тщательного проектирования, так как может привести к непредвиденным последствиям. Большинство таких последствий вызваны неоднозначностью в наследовании. В данном примере Laptop наследует метод turn_on() от обоих родителей и неясно какой метод должен быть вызван.

7

Проблема ромбовидного наследования

 

 

 

 

 

 

 

Способы решения

 

 

 

 

 

 

 

 

 

Класс А

 

 

проблемы

 

 

 

 

 

 

Вызвать метод конкретного суперкласса

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

2

Обратиться к объекту подкласса как к объекту

Класс В

 

 

Класс С

 

 

определенного суперкласса

 

 

 

 

 

 

3

Переопределить проблематичный метод в последнем

 

 

 

 

 

 

 

 

 

 

 

 

дочернем классе

Класс D

8

Проблема ромбовидного наследования

Если метод turn_on() не был переопределен в Laptop, вызов Laptop_instance.turn_on(), приведет к ошибке при компиляции. Объект Laptop может получить доступ к двум определениям метода turn_on() одновременно: Device:Computer:Laptop.turn_on() и Device:Monitor:Laptop.turn_on().

9

Проблема ромбовидного наследования: Конструкторы и деструкторы

Конструктор базового класса Device вызван дважды

10

Интерфейс

С++, в отличии от некоторых ООП языков, не предоставляет отдельного ключевого слова для обозначения интерфейса (interface). Тем не менее, реализация интерфейса возможна путем создания чистого абстрактного класса (pure abstract class) — класса в котором присутствуют только декларации методов. Такие классы также часто называют абстрактными базовыми классами (Abstract Base Class — ABC).

11