Переопределение функций 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()from 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.

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