C ++ - funksjon overstyring

I denne opplæringen vil vi lære om funksjonsoverstyring i C ++ ved hjelp av eksempler.

Som vi vet er arv en funksjon av OOP som lar oss lage avledede klasser fra en basisklasse. De avledede klassene arver trekk ved baseklassen.

Anta at den samme funksjonen er definert i både den avledede klassen og den baserte klassen. Nå hvis vi kaller denne funksjonen ved hjelp av objektet til den avledede klassen, blir funksjonen til den avledede klassen utført.

Dette er kjent som funksjonsoverstyring i C ++. Funksjonen i avledet klasse overstyrer funksjonen i basisklassen.

Eksempel 1: C ++ funksjon overstyring

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

Produksjon

 Avledet funksjon

Her er den samme funksjonen print()definert i begge Baseog Derivedklasser.

Så, når vi kaller print()fra Derivedobjektet derived1, den print()fra Derivedutføres ved å overstyre funksjonen i Base.

Arbeider med funksjonsoverstyring i C ++

Få tilgang til overstyrt funksjon i C ++

For å få tilgang til den overstyrte funksjonen til baseklassen, bruker vi omfangsoppløsningsoperatøren ::.

Vi kan også få tilgang til den overstyrte funksjonen ved å bruke en peker i baseklassen for å peke på et objekt fra den avledede klassen og deretter ringe funksjonen fra den pekeren.

Eksempel 2: C ++ Tilgang overstyrt funksjon til basisklassen

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

Produksjon

 Avledet funksjon Base Funksjon

Her denne uttalelsen

 derived2.Base::print();

får tilgang til print()funksjonen til baseklassen.

Få tilgang til overstyrt funksjon ved hjelp av objekt fra avledet klasse i C ++

Eksempel 3: C ++ samtaleoverstyrt funksjon fra avledet 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; )

Produksjon

 Avledet funksjon Base Funksjon

I dette programmet har vi kalt den overstyrte funksjonen i selve Derivedklassen.

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

Legg merke til koden Base::print();, som kaller den overstyrte funksjonen i Derivedklassen.

Tilgang overstyrt funksjon i avledet klasse i C ++

Eksempel 4: C ++ samtaleoverstyrt funksjon ved hjelp av pekeren

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