Использование виртуальных функций и указателей на производные типы

Использование виртуальных функций и указателей на производные типы

Использование виртуальных функций и указателей на производные типы

 

Понятие полиморфизма является очень важным в объектно-ориентированном программировании. В приложении к языку C++ полиморфизм это термин, используемый для описания процесса, при котором различные реализации функций могут быть доступны с использованием одного имени. По этой причине полиморфизм иногда характеризуется одной фразой – «один интерфейс, много методов». Это означает, что основной класс операций может быть оформлен в одном стиле, хотя конкретные действии могут быть различны.

В C++ полиморфизм поддерживается и во время компиляции, и во время выполнения программы. Перегрузка функции и операций – это пример полиморфизма во время компиляции. Но в С++ поддерживается полиморфизм и во время выполнения программы. Эта достигается использованием указателей на базовые классы и виртуальных функций.

 

Указатели на производные типы

 

Указатели на базовый тип и на производный тип зависимы. Пусть имеем базовый тип B_class и производный от B_class тип D_class. В языке С++ всякий указатель, объявленный как указатель на B_class, может быть также указателем на D_class:

 

B_class *р;       // указатель на объект типа B_class

B_class B_ob; // объект типа B_class

D_class D_ob; // объект типа D_class

 

После этого можно использовать следующие операции:

p=&B_ob; // Указатель на объект типа B_class

p=&D_ob; // Указатель на объект типа D_class

 

Все элементы класса D_class, наследуемые от класса B_class, могут быть доступны через использование указателя р. Однако на элементы, объявленные в D_class, нельзя ссылаться, используя р. Если требуется иметь доступ к элементам, объявленным в производном классе, используя указатель на базовый класс, надо привести его к указателю на производный тип.

Например, можно сделать так:

((D_class *)p) -> f();

Здесь функция f() – член класса D_class. Внешние круглые скобки необходимы. Хотя указатель на базовый класс может быть использован как указатель на производный класс, обратное неверно: нельзя использовать указатель на производный класс для присваивания ему адреса объекта базового класса. И наконец, указатель увеличивается и уменьшается при операциях ++ и — относительно его базового типа. Когда указатель на базовый класс указывает на производный класс, увеличение указателя не делает его указывающим на следующий элемент производного класса.

Рассмотрим пример (ex24) использования указателей на базовый класс. При этом каждый класс будет содержать функцию void show(void), свою в каждом классе.

 

// Использование указателя на базовый класс

 

#include <stdio.

Комментарии к записи Использование виртуальных функций и указателей на производные типы отключены

Рубрика: Программирование

Обсуждение закрыто.