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

В този урок ще научим за заместването на функциите в C ++ с помощта на примери.

Както знаем, наследяването е характеристика на ООП, която ни позволява да създаваме производни класове от основен клас. Получените класове наследяват характеристики на базовия клас.

Да предположим, че една и съща функция е дефинирана както в производния клас, така и в базирания клас. Сега, ако извикаме тази функция, използвайки обекта на производния клас, функцията на производния клас се изпълнява.

Това е известно като заместване на функцията в C ++. Функцията в производен клас заменя функцията в базовия клас.

Пример 1: Замяна на функцията C ++

 // C++ program to demonstrate function overriding #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1; derived1.print(); return 0; )

Изход

 Производна функция

Тук една и съща функция print()е дефинирана и в двата, Baseи в Derivedкласовете.

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

Работа с функция, заместваща в C ++

Достъп до заменена функция в C ++

За достъп до заменената функция на базовия клас използваме оператора за разделителна способност ::.

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

Пример 2: Заменена функция за достъп на C ++ до основния клас

 // C++ program to access overridden function // in main() using the scope resolution operator :: #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1, derived2; derived1.print(); // access print() function of the Base class derived2.Base::print(); return 0; )

Изход

 Производна функция Основна функция

Ето, това твърдение

 derived2.Base::print();

има достъп до print()функцията на базовия клас.

Достъп до заменена функция с помощта на обект от производен клас в C ++

Пример 3: Функция за заместване на повикване на C ++ от производен клас

 // C++ program to call the overridden function // from a member function of the derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; // call overridden function Base::print(); ) ); int main() ( Derived derived1; derived1.print(); return 0; )

Изход

 Производна функция Основна функция

В тази програма сме извикали заменената функция вътре в Derivedсамия клас.

 class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );

Забележете кода Base::print();, който извиква заменената функция вътре в Derivedкласа.

Достъп до заменена функция в производен клас в C ++

Пример 4: Функция за заместване на повикване на C ++ с помощта на указател

 // C++ program to access overridden function using pointer // of Base type that points to an object of Derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" 

Output

 Base Function

In this program, we have created a pointer of Base type named ptr. This pointer points to the Derived object derived1.

 // pointer of Base type that points to derived1 Base* ptr = &derived1;

When we call the print() function using ptr, it calls the overridden function from Base.

 // call function of Base class using ptr ptr->print();

This is because even though ptr points to a Derived object, it is actually of Base type. So, it calls the member function of Base.

In order to override the Base function instead of accessing it, we need to use virtual functions in the Base class.

Интересни статии...