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

}

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

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


 

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

12034. Использование корреспондентских международных банковских счетов в Туран-Алем банке 483.5 KB
  СОДЕРЖАНИЕ [1] ВВЕДЕНИЕ [2] ГЛАВА I. МЕЖБАНКОВСКИЕ КОРРЕСПОНДЕНТСКИЕ ОТНОШЕНИЯ КАК ОСНОВА ОРГАНИЗАЦИИ И ОСУЩЕСТВЛЕНИЯ РАСЧЕТОВ МЕЖДУ БАНКАМИ. [3] Значение необходимость банков и виды банковкорреспонденто
12037. Валютный рынок Республики Казахстан 336.5 KB
  Содержание. Введение..3 1. Валютный рынок сущность понятие и основной элемент валютного рынка...5 1.1. Основная характеристика валютного рынка его участники
12038. Маркетинг банковских услуг на примере Россельхозбанка 328 KB
  54 Содержание: Введение.3 1. Обобщенная схема процесса осуществления маркетинга банковских услуг.6 1.1 Услуги коммерческих банков...
12039. ПРАВОВОЕ ПОЛОЖЕНИЕ КОММЕРЧЕСКИХ БАНКОВ НА ТЕРРИТОРИИ РОССИИИ 316 KB
  ПРАВОВОЕ ПОЛОЖЕНИЕ КОММЕРЧЕСКИХ БАНКОВ НА ТЕРРИТОРИИ РОССИИИ 3 2ВВЕДЕНИЕ Основой успешного проведения всех экономических реформ являет ся хорошо функционирующее...
12040. Охорона і раціональне використання атмосферного повітря 883 KB
  Dивчити теоретичні основираціонального ресурсозбереження у сфері природокористування в галузі охорони атмосферного повітря, джерела атмосферного забруднення, їх вплив, види забруднювачів, зміни хімічних та фізичних параметрів атмосфери під їх дією;
12041. Напрямки роботи НБУ і самих комерційних банків по підвищенню їх фінансової стабільності 335 KB
  ЗМІСТ ВСТУП РОЗДІЛ 1. Стабільність основна умова ефективної діяльності комерційних банків 1.Регулювання роботи комерційних банків Національним банком України 2.Показники що використовуються в практиці оцінки фінансового стану комерційних банків РОЗДІЛ 2. Анал...
12042. Центральный банк Российской Федерации и его роль в регулировании банковской системы страны 264 KB
  Содержание Введение Основные этапы развития банковской системы России. Современная структура банковской системы России. Общая характеристика структуры...