ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 11) онлайн
Доступ к виртуальным методам через указатели
Давайте сделаем одно маленькое изменение в нашей программе: поставим клю-
чевое слово virtual перед объявлением функции show() в базовом классе. Вот лис-
тинг того, что получилось — программы VIRT:
Листинг 11.2. Программа VIRT
// virt.cpp
// Доступ к виртуальным функциям через указатели
#include <iostream>
using namespace std;
///////////////////////////////////////////////
class Base //Базовый класс
{
public:
virtual void show() //Виртуальная функция
{ cout << "Base\n"; }
};
//////////////////////////////////////////////
class Derv1 : public Base //Производный класс 1
{
public:
void show()
{ cout << "Derv1\n"; }
};
//////////////////////////////////////////////
class Derv2 : public Base //Производный класс 2
Листинг 11.2 (продолжение)
{
public:
void show()
{ cout << "Derv2\n"; }
};
//////////////////////////////////////////////
int main()
{
Derv1 dv1; //Объект производного класса 1
Derv2 dv2; //Объект производного класса 2
Base* ptr; //Указатель на базовый класс
ptr = &dv1; //Адрес dv1 занести в указатель
ptr->show(); //Выполнить show()
ptr = &dv2; //Адрес dv2 занести в указатель
ptr->show(); //Выполнить show()
return 0;
}
На выходе имеем:
Derv1
Derv2
Теперь, как видите, выполняются методы производных классов, а не базового.
Мы изменили содержимое ptr с адреса из класса Derv1 на адрес из класса Derv2,
и изменилось реальное выполнение show(). Значит, один и тот же вызов
ptr->show()
ставит на выполнение разные функции в зависимости от содержимого ptr. Компи-
лятор выбирает функцию, удовлетворяющую тому, что занесено в указатель, а не
типу указателя, как было в программе NOTVIRT. Это показано на рис. 11.2.
Рис. 11.2. Доступ через указатель к виртуальным функциям
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Схожі підручники
- Бухгалтерський фінансовий облік (частина 1)
- Соціологія Навчально-методичний посібник для студентів всіх напрямків (частина 1)
- Українська мова за професійним спрямуванням. Навчальний посібник (частина 2)
- Економіка підприємства. Методичка
- Розрахункова робота з курсу Економыка Пыдприэмства
- Белая книга (частина 6) (онлайн)
