Виртуелне методе

Виртуелна метода је сопствена (не static) метода основне класе, која може да се замени истоименом методом одговарајуће изведене класе када се позове за објекат који припада изведеној класи. Пријатељске функције неке класе не могу да буду виртуелне за ти класу, јер не припадају тој класи.
Виртуелне методе декларишу се додавањем модификатора virtual на почетак њихове декларације у основној класи. Приликом поновног декларисања у изведеним класама модификатор virtual се подразумева, те не мора да буде експлицитно наведен.

Декларације дате виртуелне методе у основној и у свим изведеним класама морају да имају исти број и типове параметара и да дају резултат истог типа. Једино у чему се оне разликују је тип објекта за који се позивају. Приликом позивања виртуелне методе показивачем или упућивачем на објекте класе, позиваће се истоимена метода изведене класе на чији објекат у том моменту указује дати показивач или упућивач.
Класе које поседују бар једну виртуелну методу називају се полиморфне класе.
Статички тип показивача наведен је у наредби за дефинисање, зна се већ у време превођења и не може да се промени током извршавања програма.
Динамички тип показивача омогућава позивање одговарајуће виртуелне методе (или за изведену или за основну класу, зависи од текућег објекта).
Виртуелна метода не мора да се дефинише у свим изведеним класама. Ако у некој изведеној класи није дефинисана виртуелна метода позива се метода из основне класе.

Приликом преклапања имена метода све методе се разликују по броју и типовима параметара – статички избор (пре почетка извршавања програма).
Виртуелне методе имају параметре истих типова и дају резултат истог типа. Позвана метода бира се динамички, приликом извршавања програма.
Употреба виртуелних метода обезбеђује објектно оријентисани принцип по коме понашање програма зависи од типа података који се обрађује.
Конструктори не могу бити виртуелне методе. Деструктори могу бити виртуелни.

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s