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

}

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

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


 

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

66253. Жизненный цикл программного продукта 53.5 KB
  Модель определяется конкретным сочетанием стадий и процессов разработки ориентированных на разные классы ПО и особенности коллектива разработчиков. Здесь рассматриваются только некоторые устоявшиеся модели процесса разработки программного обеспечения.
66254. Математичний брейн-ринг 63.5 KB
  За цей час команда повинна знати відповідь а капітан підняти руку. Якщо команда дала невірну відповідь друга команда має можливість відповісти. Це гра переможцем якої стає гравець або команда яка виявить більшу ерудицію швидку реакцію на запитання.
66256. Урок-театр Р. Бредбери «Всё лето в один день» 87.5 KB
  Благодарю тебя Создатель Марго просыпается берёт искусственные цветы Дети считаются Мы пришли на космодром Посмотрите что на нём Раз ракета два ракета Обживай планету эту Лет по 7 здесь дождь живёт На Венеру льёт и льёт Солнце солнце выходи...
66258. Конспект урока литературного чтения 19.83 KB
  Цель: создать условия для ознакомления обучающихся с непарным мягким согласным звуком й и буквами Й й означающими этот звук на письме; способствовать формированию навыков написания буквы и. Планируемые результаты: Предметные: обся научатся определять на слух наличие в словах звука й характеризовать...
66259. Телевізійний новорічний вогник 126 KB
  Відкривається сцена. Стоять столики із стільчиками Вибігає заклопотана Пеппі-Довга панчоха. Все перевіряє, поправляє іграшки на ялинці. Пеппі. - Світло! (засвітилася ялинка) Убрать! (тухне) Здається все нормально.
66260. Крок до цивілізованого спілкування 55.5 KB
  Виховання культури мобільного спілкування. Презентації Виховання культури мобільного спілкування та Заповіді мобілемана відеоролик Правда про мобільний телефон Епіграфи: Зробимо крок до цивілізованого спілкування. Мігель Сервантес Єдина справжня розкіш...