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

}

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

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


 

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

32821. «Философия жизни», как одно из основных направлений западноевропейской философии 20 в 14.13 KB
  Одним из вариантов стала философия жизни. Все существующее представители этого направления рассматривали как проявление некой первоначальной реальности – жизни недоступной ни чувственному ни рациональному познанию и постигаемой только интуитивно в результате непосредственных переживаний. Противопоставляя науке и разуму интуицию и инстинкт философия жизни представляет собой антисциентистское иррационалистическое направление.
32822. Философия неопозитивизма 16.04 KB
  Бурное развитие науки и техники формирование сциентизма как особого умонастроения стали причиной формирования ряда философских направлений в центре внимания которых проблема науки как феномена культуры а также вопросы методологии научного познания. Он выступил с идеей о неспособности философии ответить на вопросы поставленные развитием науки. Неопозитивизм уходя от решения коренных философских проблем сосредотачивается на частных логикометодологических исследованиях на анализе языка науки. Логический позитивизм спекулирует на реальных...
32823. Философия психоанализа 14.61 KB
  В центре внимания Фрейда – проблема бессознательного. Содержание бессознательного Фрейд сводит к двум видам влечений – сексуальные инстинкты либидо и влечение к жизни направленное на самосохранение оба влечения он выводит из комплекса Эдипа и комплекса электры. Юнг разработал концепцию коллективного бессознательного. Содержанием коллективного бессознательного являются врожденные образы символы – архетипы.
32824. Религиозная философия ХХ в 14.56 KB
  Ее основной чертой является стремление осмыслить проблемы современного человека с позиций христианской религии. Основные идеи Ф Аквинского: о структуре мироздания о соотношения веры и разума о месте человека в мире – являются основой неотомизма. Характерные черты этого направления отличающие его от томизма – внимание к проблемам современного мира и к внутреннему миру человека.Аквинским но расходится с ним в понимании отношения Бога и человека.
32825. Философская герменевтика. Проблема понимания в философии и медицине (медицинская герменевтика) 12.91 KB
  Философская герменевтика. Проблема понимания в философии и медицине медицинская герменевтика. В Древней Греции герменевтика представляла собой искусство толкования иносказаний а позднее – поэтических произведений особенно поэм Гомера. В самостоятельную область знания герменевтика выделилась в XIX в.
32826. Бытие и материя. Категория материя. Ее признаки 17.66 KB
  Бытие – основополагающая философская категория отражающая единство мира и целостность его существования. Бытие – предельно широкое по объему понятие охватывающее все существующее. Понятие бытие введено Парменидом IV в. Для объяснения этого понятия было введено противоположное ему понятие – небытие.
32827. Движение .Пространство,время. Основные формы движения 18.43 KB
  Пространствовремя. Обладает целым рядом неотъемлемых свойств – атрибутов: системность и структурность самоорганизация движение пространство время отражение. Механистический материализм Нового времени также считал что пространство и время самостоятельны по отношению к материи: это лишь вместилища в которых расположены тела и происходят события.Кант пространство и время рассматриваются как доопытные априорные врожденные понятия которые даны сознанию субъекта для того чтобы группировать и упорядочивать наши ощущения.
32828. Отражение как всеобщее свойство материи. Его формы в живой и неживой природе 13.64 KB
  Обладает целым рядом неотъемлемых свойств – атрибутов: системность и структурность самоорганизация движение пространство время отражение. Отражение – всеобщее свойство материи ее способность воспроизводить в изменениях своих свойств состояний структуры особенности воздействующих объектов. Отражение характеризуется следующими признаками: оно предполагает взаимодействие объектов; зависит от уровня организации и структуры взаимодействующих объектов; зависит от условий в которых происходит взаимодействие объектов; отражение адекватно...
32829. Происхождение и сущность сознания. Мозг и сознание 15.06 KB
  Происхождение и сущность сознания. Психика высших животных явилась важнейшей предпосылкой формирования социальной формы отражения – сознания. Психика высших животных явилась важнейшей предпосылкой формирования социальной формы отражения – сознания. Природные и социальные факторы происхождения сознания.