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 Base
als auch in Derived
Klassen definiert.
Wenn wir also print()
vom abgeleiteten Derived
Objekt1 aufrufen, wird das print()
from Derived
ausgeführt, indem die Funktion in überschrieben wird Base
.
![](https://cdn.wiki-base.com/1143898/c_function_overriding.png.webp)
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.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_2.png.webp)
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 Derived
Klasse 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 Derived
Klasse aufruft .
![](https://cdn.wiki-base.com/1143898/c_function_overriding_3.png.webp)
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.