Замяна на функцията C ++

C Function Overriding



В тази статия ще разгледаме замяна на функции в езика за програмиране на C ++. C ++ поддържа полиморфизъм по време на изпълнение.

При замяна на функция, дъщерният клас предефинира функцията, която вече е дефинирана в родителския си клас.







Тя дава възможност на програмиста да предостави производна функционалност, специфична за класа (въпреки че е дефинирана в базовия клас).



Сега ще видим няколко примера и ще разберем концепцията за замяна на функцията в C ++.



Пример-1

Определих два класа в примера по -долу - основен клас и производен клас. Базовият клас има функция член, т.е. disp (). Derived_Class се наследява от Base_Class. Функцията disp () присъства в Base_Class и след това се дефинира отново в Derived_Class.





Във функцията main () се създава обект на Derived_Class, т.е. d. След това извикваме функцията disp () на обекта на производен клас, така че функцията в извлечения клас ще бъде извикана. Версията на базовия клас тук се игнорира. Можете да видите по -долу изхода като - disp () функция в производния клас.

#включва

използвайки пространство за имена std;

// базов клас
клас Base_Class
{
обществен:
невалиденползват()
{
цена<< 'disp () функция в базовия клас.' <<endl;
}

};

// производен клас
клас Derived_Class:публичен Base_Class
{
обществен:
невалиденползват()
{
цена<< 'функция disp () в производен клас' <<endl;
}
};

intглавен()
{
Производен_клас d;
д.ползват(); // функция disp () върху обект на производен клас
връщане 0;
}



Пример-2

В този пример ще видим как умишлено да извикаме версията на функцията на базовия клас чрез обекта на производен клас. В дефиницията на производната функция на клас използваме оператора за разрешаване на обхвата [::], за да извикаме версията на функцията на базовия клас.

#включва

използвайки пространство за имена std;

клас Base_Class
{
обществен:
невалиденползват()
{
цена<< 'disp () функция в базовия клас.' <<endl;
}

};

клас Derived_Class:публичен Base_Class
{
обществен:
невалиденползват()
{
Base_Class::ползват(); // Извикваме версията на базовия клас на disp ()
}
};

intглавен()
{
Производен_клас d;
д.ползват();
връщане 0;
}

Пример-3

Това е друг пример за замяна на функция. В този пример създадохме родителски клас - Animal и два производни класа - Duck и Dog. Базовият клас, т.е. класът Animal, има функция -член sound ().

В получения клас клас/дете, т.е. Dog, ние предефинирахме същата функция, т.е. звук (), за да заменим дефиницията на базовия клас. По същия начин, в другия производен клас, т.е. Duck, ние дефинирахме същата функция, т.е. звук ().

Във функцията main () създадохме кучешкия обект на Dog and duck of Duck. Така че, сега, когато извикаме функцията sound () за куче и патица, ще се извика производната версия на функцията sound (). Можете да видите резултата от програмата, както е показано по -долу. Така че, с помощта на функцията за замяна, можем да извикаме производната функция, специфична за класа.

#включва

използвайки пространство за имена std;

клас Животно
{
обществен:
невалидензвук()
{
цена<< „Животински звук!“ <<endl;
}

};

// Производен клас - Кучешки клас
клас Куче:обществено животно
{
обществен:
невалидензвук()
{
цена<< „Кучешки звук - лай“. <<endl;
}
};

// Производен клас - Патешки клас
клас Патица:обществено животно
{
обществен:
невалидензвук()
{
цена<< „Патешки звук - шарлатанство“. <<endl;
}
};


intглавен()
{
Куче куче;
Патица патица;

куче.звук(); // звук () на куче
патица.звук(); // звук () на патица

връщане 0;
}

Заключение

В тази статия обясних, че функцията има приоритет C ++ . Езикът C ++ поддържа полиморфизъм по време на изпълнение. Заместването на функции помага за постигане на полиморфизъм по време на изпълнение в C ++. Тази статия разглежда концепцията за отменяне на функции и как да се постигне полиморфизъм по време на работа с помощта на замяна на функции.