В този урок ще научим за заместването на функциите в 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
.
![](https://cdn.wiki-base.com/1143898/c_function_overriding.png.webp)
Достъп до заменена функция в 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()
функцията на базовия клас.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_2.png.webp)
Пример 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
класа.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_3.png.webp)
Пример 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.