C ++ Functie overschrijven

In deze zelfstudie leren we met behulp van voorbeelden over het overschrijven van functies in C ++.

Zoals we weten, is overerving een kenmerk van OOP waarmee we afgeleide klassen van een basisklasse kunnen maken. De afgeleide klassen erven kenmerken van de basisklasse.

Stel dat dezelfde functie is gedefinieerd in zowel de afgeleide klasse als de gebaseerde klasse. Als we deze functie nu aanroepen met het object van de afgeleide klasse, wordt de functie van de afgeleide klasse uitgevoerd.

Dit staat bekend als functie-overschrijving in C ++. De functie in de afgeleide klasse overschrijft de functie in de basisklasse.

Voorbeeld 1: C ++ functie overschrijven

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

Uitvoer

 Afgeleide functie

Hier, dezelfde functie print()wordt gedefinieerd in beide Baseen Derivedklassen.

Dus als we aanroepen print()vanaf het Derivedobject afgeleid1, wordt de print()van Deriveduitgevoerd door de functie in Base.

Werking van functie-overschrijving in C ++

Toegang tot overschreven functie in C ++

Om toegang te krijgen tot de overschreven functie van de basisklasse, gebruiken we de scoopresolutie-operator ::.

We hebben ook toegang tot de overschreven functie door een pointer van de basisklasse te gebruiken om naar een object van de afgeleide klasse te wijzen en vervolgens de functie van die pointer aan te roepen.

Voorbeeld 2: C ++ Access Overridden-functie naar de 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; )

Uitvoer

 Afgeleide functie Basisfunctie

Hier, deze verklaring

 derived2.Base::print();

geeft toegang tot de print()functie van de klasse Base.

Toegang tot overschreven functie met behulp van object van afgeleide klasse in C ++

Voorbeeld 3: C ++ oproep overschreven functie van afgeleide 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; )

Uitvoer

 Afgeleide functie Basisfunctie

In dit programma hebben we de overschreven functie binnen de Derivedklasse zelf aangeroepen .

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

Let op de code Base::print();, die de overschreven functie binnen de Derivedklas aanroept .

Toegang overschreven functie binnen afgeleide klasse in C ++

Voorbeeld 4: C ++ Oproep overschreven functie met aanwijzer

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