89781

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

Лекция

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

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

Русский

2015-05-13

39.45 KB

4 чел.

Полиморфизм

Содержание

Полиморфизм

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

Полиморфизм

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

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

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

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

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

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

}

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

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


 

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

73793. Психологическое просвещение, как одно из направлений деятельности практического психолога 16.31 KB
  Важнейшая задача психологического просвещения расширение психологических знаний и повышение психологической культуры людей. Первая задача психологического просвещения направлена на то чтобы обеспечить людям возможность пользоваться психологическими знаниями и технологиями: сформировать у них соответствующие желания и понимание того чем им может помочь психология готовность работать над собой и своим поведением с помощью психологических методик и техник. Вторая задача информирование по вопросам психологических знаний. Иногда знания...
73794. Психологическая диагностика, как одно из направлений деятельности практического психолога 17.3 KB
  Психодиагностика осуществляется на основе: объективных показателей деятельности реальной или моделируемой в эксперименте тесте; субъективных показателей сведений сообщаемых о себе самом человеком Инструментом для оценивания в работе психолога-диагноста являются его профессиональные психологические наблюдения беседы психологические тесты...
73795. Психологическое консультирование, как одно из направлений деятельности практического психолога 17.88 KB
  Оно включает в себя и профконсультирование и педагогическое и промышленное консультирование и консультирование руководителей и многое другое. Групповое консультирование может проводиться с семьей производственной группой или группой людей не связанных друг с другом в повседневной жизни но имеющих общие проблемы. Наиболее частыми вариантами работы при групповом консультировании являются семейное консультирование работа по разрешению межличностных конфликтов и проблемных ситуаций в коллективах.
73796. Психотерапия как одно из направлений деятельности практического психолога 17.42 KB
  Обычно такая психологическая помощь обозначается понятием психотерапия. Психотерапия это комплексное лечебное вербальное и невербальное воздействие на эмоции суждения самосознание человека при психических нервных и психосоматических заболеваниях. Чаще всего психотерапия обращена к личностным проблемам ставящим человека на грань психических нарушений или даже переводящим за эту грань с чем связаны тягостные переживания нарушения социального поведения изменения сознания и самосознания и пр.
73797. Психопрофилактика, как одно из направлений деятельности практического психолога 17.39 KB
  Врачи часто недооценивают значение работы медицинских психологов в клинике и активно ее не принимают. Проявляется взаимное непонимание врачей и психологов. Заключения психологов строятся на использовании методов несопоставимых по своей точности с диагностическими медицинскими исследованиями. Сейчас большинство медицинских психологов работает в области психиатрии.
73798. Психокоррекционная и развивающая работа, как одно из направлений деятельности практического психолога 18.96 KB
  Термин коррекция психического развития как обозначение определенной формы психологической деятельности впервые возник в дефектологии применительно к вариантам аномального развития. В психологии психокоррекция стала трактоваться как совокупность мер психологического воздействия направленных на доформирование отсутствующих психических...
73799. Программирование разветвлений 524 KB
  Блок-схема алгоритма Условные операторы Для программирования разветвляющейся структуры на Фортране предусмотрено несколько видов условных операторов: условный логический оператор условный блочный оператор условный структурный оператор. В записи алгоритма эти операторы заменяют шаг ЕСЛИ в блокс-хемах. В этих операторах условие записывается в виде логического выражения которое может принимать лишь два значения...
73800. Философия Нового Времени 94.5 KB
  Развитие принципов научного познания в европейской философии XVII века Философия нового времени. Гоббс: единство эмпирических и рациональных методов познания. Развитие принципов научного познания в европейской философии XVII века Философия нового времени Общественный прогресс определяемый глубокими экономическими причинами все в большей степени выявляет необходимость развития научного познания и науки в целом. Именно в это время создаются первые системы научного познания всесторонне обсуждаются возможности человеческого разума...
73801. Реконструкция, модернизация и капитальный ремонт общественных и жилых зданий 45.5 KB
  Характеристика существующего фонда общественных и жилых зданий. Фонд общественных и гражданских зданий составляют в основном здания постройки второй половины Х1Х века и нашего столетия. Кроме того в тот период для выполнения строительно-монтажных работ имелся достаточный парк строительных машин и механизмов способных обеспечить строительство зданий такой высоты.