89781

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

Лекция

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

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

Русский

2015-05-13

39.45 KB

5 чел.

Полиморфизм

Содержание

Полиморфизм

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

Полиморфизм

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

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

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

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

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

Пример #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

}

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

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


 

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

17488. Формати і правила роботи з командами множення і ділення мікропроцесора i8086 38.43 KB
  Лабораторна робота №3 З дисципліни СПіОС на тему Формати і правила роботи з командами множення і ділення мікропроцесора i8086 Мета: Ознайомитись з основними форматами і правилами роботи з командами множення і ділення мікропроцесора i8086. Вивчити основні відомості ...
17489. Формати і правила роботи з командами маніпулювання бітами мікропроцесора i8086 38.76 KB
  Лабораторна робота №4 З дисципліни СПіОС на тему Формати і правила роботи з командами маніпулювання бітами мікропроцесора i8086 Мета: Ознайомитись з основними форматами і правилами роботи з командами маніпулювання бітами мікропроцесора i8086. Вивчити основні відом
17490. Изучение процесса прокольной прокатки 220.5 KB
  Цель работы: изучить устройство прокатного стана условия захвата заготовки валками; рассчитать основные величины деформации при прокатке; определить опережение и угол захвата. Краткие теоретические сведения Прокатка заключается в обжатии заготовки между вращаю...
17491. Складання комплексного документа в текстовому редакторі Word 979 KB
  ЛАБОРАТОРНА РОБОТА 1 Складання комплексного документа в текстовому редакторі Word Мета роботи: навчитися складати комплексний документ в текстовому редакторі Word: набирати та редагувати текст створювати та змінювати таблиці використовувати таблиці для обчислення дан...
17492. Побудова графіків в редакторі Excel 437.5 KB
  ЛАБОРАТОРНА РОБОТА 2 Побудова графіків в редакторі Excel Мета роботи: навчитися користуватися таблицями для обчислення даних редагувати таблиці створювати графіки на основі таблиць даних прогнозувати дані. Загальні положення побудови графіка за числовими даними
17493. Методи наближеного розв’язання рівнянь в редакторі Excel 364.5 KB
  ЛАБОРАТОРНА РОБОТА 3 Методи наближеного розвязання рівнянь в редакторі Excel Мета роботи: навчитися знаходити корені рівняння за допомогою редактора Excel визначати точність знайденого розвязку. Загальні положення про корені рівняння та точність знайденого розвяз
17494. Використання логічних операторів в редакторі Excel для пошуку рішень 505.5 KB
  ЛАБОРАТОРНА РОБОТА 4 Використання логічних операторів в редакторі Excel для пошуку рішень Мета роботи: навчитися користуватися логічними операторами для пошуку правильних рішень логічних задач. Загальні положення про використання логічних операторів В таблиці 1 н
17495. Розв’язання рівнянь методом ітерацій в MathCAD 520.5 KB
  ЛАБОРАТОРНА РОБОТА 5 Розвязання рівнянь методом ітерацій в MathCAD Мета роботи: навчитися користуватися базовими командами і функціями розвязувати рівняння за допомогою методів хорд і дотичних. Загальні відомості про базові функції MathCAD Рядок меню розміщується у в...
17496. Розв’язання алгебраїчних рівнянь за допомогою вбудованих функцій root та polyroots 191 KB
  ЛАБОРАТОРНА РОБОТА 6 Розвязання алгебраїчних рівнянь за допомогою вбудованих функцій root та polyroots Мета роботи: навчитися користуватися вбудованими функціями розвязувати рівняння за допомогою функцій root та polyroots. Загальні положення розвязання алгебраїчного рівня...