В этом руководстве мы узнаем о переопределении функций в 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()
from Derived
выполняется путем переопределения функции в Base
.

Функция переопределения доступа в 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()
функции базового класса.

Пример 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
класса.

Пример 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.