89781

Полиморфизм. Таблица виртуальных методов

Лекция

Информатика, кибернетика и программирование

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

Русский

2015-05-13

39.45 KB

3 чел.

Полиморфизм

Содержание

Полиморфизм

  •  простой
  •  сложный
  •  виртуальные функции
  •  таблица виртуальных методов

Полиморфизм

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

При этом различают простой (механизм раннего связывания) и сложный полиморфизм (механизм позднего связывания).

Простой полиморфизм

Простой (статический) полиморфизм поддерживается языком С++ на этапе компиляции и реализуется с помощью механизма переопределения функций.

Эти переопределяемые полиморфные функции могут отличаться типом возвращаемого параметра и сигнатурой (количеством и типом передаваемых параметров)

Пример #6. Простой полиморфизм

class A { int a;

public:

void show (){cout<<“Вывод:”<<endl; print();}

void print (void){cout<<a<<endl;};

A(int v): a(v){}};

class B: public A {int b; public:

void print (void){cout<<b<<endl;};

B(int va, int vb): A(va), b(vb){}};

void main()

{A aa(20); B bb(10, 100);

//явный вызов полиморфной функции print()  

aa.print(); // вывод:20

bb.print; // вывод:100

//неявный вызов полиморфной функции print()  

aa.show();// вывод:20

bb.show(); // вывод:10

}

Комментарии:

При раннем связывании вызываемый метод SHOW в базовом классе жестко соединяется с переопределяемым далее методом PRINT на этапе компиляции и вызов наследуемого метода SHOW приведет к вызову метода PRINT базового класса, а не производного класса.

Сложный полиморфизм

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

Виртуальные функции

Виртуальными называются функции, которые объявляются с использованием ключевого слова virtual в базовом классе и переопределяются (замещаются) в производных классах.

При этом прототипы функций должны совпадать не только по именам, но и по типу возвращаемого результат и сигнатуре.

Пример #7. Сложный полиморфизм

class A { int a; public:

void show (){cout<<“Вывод:”<<endl; print();}

virtual void print (void){cout<<a<<endl;};

A(int v): a(v){}};

class B: public A {int b; public:

void print (void){cout<<b<<endl;};

B(int va, int vb): A(va), b(vb){}};

void main()

{A aa(20), *pa; B bb(10, 100);

//явный вызов полиморфной функции print()  

aa.print(); // вывод:20

bb.print; // вывод:100

//неявный вызов полиморфной функции print()  

aa.show();// вывод:20

bb.show(); // вывод:100

// вызов функции print() по указателю 

pa=&aa; pa->print();// вывод:20

pa=&bb; pa->print(); // вывод:100

}

Таблица виртуальных методов (ТВМ)

Вызов виртуальной функции реализуется как косвенный вызов по ТВМ, которая создается во время компиляции и используется во время выполнения программы для поиска нужного кода полиморфной функции.


 

А также другие работы, которые могут Вас заинтересовать

8125. Методы неинформированного поиска. Поиск в ширину, в глубину, однородной стоимости, ограниченный по глубине поиск 142.53 KB
  Методы не информированного поиска. Поиск в ширину,в глубину, однородной стоимости, ограниченный по глубине поиск. Основная проблема в области поиска - нахождение хорошей стратегии поиска для заданной задачи. Страт...
8126. Методы неинформированного поиска. Поиск с итеративным углублением, двунаправленный поиск. Поиск c удовлетворением ограничений. Cложность методов поиска 241.79 KB
  Методы не информированного поиска. Поиск с итеративным углублением, двунаправленный поиск. Поискc удовлетворением ограничений. Cложность методов поиска. Итеративно углубляющийся поиск. В ограниченном по глубине пои...
8127. Методы информированного поиска. Поиск сначала лучший. A*-поиск. 316.08 KB
  Методы информированного поиска. Поиск сначала лучший. A*-поиск. Методы не информированного (слепого) поиска в большинстве случаев неэффективны. Эффективность поиска может быть повышена за счет использования дополнительны...
8128. Альфа-бета отсечение 392 KB
  Альфа-бета отсечение (конспект) При минимаксном поиске количество состояний игры, которые должны быть исследованы в процессе поиска, экспоненциально зависит от количества ходов. Эту зависимость, к сожалению, невозможно устранить, но существует возмо...
8129. Архитектура доски объявлений (ДО) 238 KB
  Архитектура доски объявлений (ДО). (Конспект) Архитектура ДО. В первой половине 70-х годов по заказу Управления перспективных исследований США DARPA рядом американских университетов была выполнена пятилетняя исследовательская программа, направленная...
8130. Модели представления и обработки неопределенных знаний. Коэффициенты уверенности Шортлифа 71 KB
  Модели представления и обработки неопределенных знаний. Коэффициенты уверенности Шортлифа. (Конспект) Представление и обработка в ЭС неопределенных знаний Экспертным знаниям, как правило, присуща неопределенность. В инженерии знаний принято выделять...
8131. Нечеткие множества. Лингвистическая переменная. Нечеткая логика. Нечеткий вывод. Композиционное правило вывода 142.5 KB
  Нечеткие множества. Лингвистическая переменная. Нечеткая логика. Нечеткий вывод. Композиционное правило вывода. (Конспект) В основе понятия нечеткого множества (НИ) лежит представление о том, что обладающие общим свойством элементы некоторого множес...
8132. Байесовские сети 75.5 KB
  Байесовские сети (Конспект) Теорема Байеса: Пусть Ai - полная группа несовместных событий, тогда формула Байеса (формула перерасчета гипотез) и B некоторое событие положительной вероятности Доказательство следует из теоремы умножения и формулы...
8133. Модели планирования действий в системах искусственного интеллекта 94.5 KB
  Модели планирования действий в системах искусственного интеллекта Задача планирования. Язык описания состояний и действий. Планирование на основе поиска в пространстве состояний. Планированием называется процесс выработки последовательности действий...