Составители:
Рубрика:
72
которая отражает поведение того объекта, для которого осуществлялся
вызов. Полиморфное поведение функций обеспечивается поздним свя-
зыванием функций, когда определение того экземпляра одноименных
функций, которому будет передано управление, определяется на этапе
выполнения программы.
Для того, чтобы компонентная функция обеспечивала полиморф-
ное поведение, ее необходимо объявить виртуальной. Для этого в оп-
ределении
функции в классе необходимо указать ключевое слово
virtual.
virtual тип имя_функции (список_формальных параметров)
{тело функции }
Если мы изменим определение функции func1 , объявив ее вирту-
альной, поведение объектов программы изменится.
//Листинг 30. Использование виртуальных функций
class Base
{ …
virtual int func1(int x) {return x*x;}
};
class Child: public Base
{…
virtual int func1(int x) {return x*x*x;}
};
main()
{ Child c;
cout<<c.func2(5); //на экран выводится 62
Base *ptb=new Child;
cout<<ptb->func1(2); //на экран выводится 8
}
В языке С++ позднее связывание реализуется путем поддержки
для каждого объекта таблицы виртуальных функций. Таблица вирту-
альных функций представляет собой массив указателей на реализации
виртуальных функций, доступные для данного объекта. Структура объ-
екта при использовании им виртуальных функций, изображена на
рис.13.
которая отражает поведение того объекта, для которого осуществлялся вызов. Полиморфное поведение функций обеспечивается поздним свя- зыванием функций, когда определение того экземпляра одноименных функций, которому будет передано управление, определяется на этапе выполнения программы. Для того, чтобы компонентная функция обеспечивала полиморф- ное поведение, ее необходимо объявить виртуальной. Для этого в оп- ределении функции в классе необходимо указать ключевое слово virtual. virtual тип имя_функции (список_формальных параметров) {тело функции } Если мы изменим определение функции func1 , объявив ее вирту- альной, поведение объектов программы изменится. //Листинг 30. Использование виртуальных функций class Base {… virtual int func1(int x) {return x*x;} }; class Child: public Base {… virtual int func1(int x) {return x*x*x;} }; main() { Child c; cout<func1(2); //на экран выводится 8 } В языке С++ позднее связывание реализуется путем поддержки для каждого объекта таблицы виртуальных функций. Таблица вирту- альных функций представляет собой массив указателей на реализации виртуальных функций, доступные для данного объекта. Структура объ- екта при использовании им виртуальных функций, изображена на рис.13. 72
Страницы
- « первая
- ‹ предыдущая
- …
- 70
- 71
- 72
- 73
- 74
- …
- следующая ›
- последняя »