Überschreiben der C ++ - Funktion

In diesem Tutorial lernen wir anhand von Beispielen, wie Funktionen in C ++ überschrieben werden.

Wie wir wissen, ist die Vererbung eine Funktion von OOP, mit der wir abgeleitete Klassen aus einer Basisklasse erstellen können. Die abgeleiteten Klassen erben Merkmale der Basisklasse.

Angenommen, dieselbe Funktion ist sowohl in der abgeleiteten als auch in der basierten Klasse definiert. Wenn wir diese Funktion nun mit dem Objekt der abgeleiteten Klasse aufrufen, wird die Funktion der abgeleiteten Klasse ausgeführt.

Dies wird in C ++ als Überschreiben von Funktionen bezeichnet . Die Funktion in der abgeleiteten Klasse überschreibt die Funktion in der Basisklasse.

Beispiel 1: Überschreiben der C ++ - Funktion

 // 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; )

Ausgabe

 Abgeleitete Funktion

Hier ist dieselbe Funktion print()sowohl in Baseals auch in DerivedKlassen definiert.

Wenn wir also print()vom abgeleiteten DerivedObjekt1 aufrufen, wird das print()from Derivedausgeführt, indem die Funktion in überschrieben wird Base.

Funktionieren von Funktionen, die in C ++ überschrieben werden

Zugriff auf überschriebene Funktion in C ++

Um auf die überschriebene Funktion der Basisklasse zuzugreifen, verwenden wir den Operator für die Bereichsauflösung ::.

Wir können auch auf die überschriebene Funktion zugreifen, indem wir einen Zeiger der Basisklasse verwenden, um auf ein Objekt der abgeleiteten Klasse zu zeigen, und dann die Funktion von diesem Zeiger aus aufrufen.

Beispiel 2: Überschriebene C ++ - Zugriffsfunktion auf die Basisklasse

 // 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; )

Ausgabe

 Abgeleitete Funktion Basisfunktion

Hier diese Aussage

 derived2.Base::print();

greift auf die print()Funktion der Basisklasse zu.

Zugriff auf überschriebene Funktion mit Objekt der abgeleiteten Klasse in C ++

Beispiel 3: C ++ - Aufruf überschriebene Funktion von abgeleiteter Klasse

 // 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; )

Ausgabe

 Abgeleitete Funktion Basisfunktion

In diesem Programm haben wir die überschriebene Funktion innerhalb der DerivedKlasse selbst aufgerufen .

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

Beachten Sie den Code Base::print();, der die überschriebene Funktion innerhalb der DerivedKlasse aufruft .

Zugriff überschriebene Funktion innerhalb der abgeleiteten Klasse in C ++

Beispiel 4: C ++ - Aufruf überschriebene Funktion mit Zeiger

 // 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.

Interessante Beiträge...