Preglasitev funkcije C ++

V tej vadnici bomo s pomočjo primerov spoznali preglasitev funkcij v jeziku C ++.

Kot vemo, je dedovanje značilnost OOP, ki nam omogoča ustvarjanje izvedenih razredov iz osnovnega razreda. Izpeljani razredi podedujejo lastnosti osnovnega razreda.

Recimo, da je ista funkcija definirana tako v izpeljanem razredu kot v osnovnem razredu. Če to funkcijo pokličemo z uporabo predmeta izpeljanega razreda, se izvede funkcija izpeljanega razreda.

To je znano kot preglasitev funkcije v C ++. Funkcija v izpeljanem razredu preglasi funkcijo v osnovnem razredu.

Primer 1: Preglasitev funkcije 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; )

Izhod

 Izpeljana funkcija

Tukaj, isto funkcijo print()je opredeljen v obeh Basein Derivedrazredih.

Torej, ko prikličemo print()iz izpeljanega Derivedpredmeta1, se print()iz Derivedizvaja s preglasitvijo funkcije v Base.

Delovanje preglasitve funkcije v C ++

Dostopajte do prepisane funkcije v C ++

Za dostop do razveljavljene funkcije osnovnega razreda uporabimo operater ločljivosti obsega ::.

Do razveljavljene funkcije lahko pridemo tudi tako, da s kazalcem osnovnega razreda pokažemo na objekt izpeljanega razreda in nato iz tega kazalca prikličemo funkcijo.

Primer 2: Funkcija preglasitve dostopa C ++ do osnovnega razreda

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

Izhod

 Izvedena funkcija Osnovna funkcija

Tukaj, ta izjava

 derived2.Base::print();

dostopa do print()funkcije osnovnega razreda.

Dostopite do prepisane funkcije z uporabo predmeta izpeljanega razreda v jeziku C ++

Primer 3: Funkcija razveljavitve klica C ++ iz izpeljanega razreda

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

Izhod

 Izvedena funkcija Osnovna funkcija

V tem programu smo preklicali funkcijo znotraj samega Derivedrazreda.

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

Upoštevajte kodo Base::print();, ki prikliče nadomeščeno funkcijo znotraj Derivedrazreda.

Dostopajte do razveljavljene funkcije znotraj izvedenega razreda v jeziku C ++

Primer 4: Funkcija preglasitve klica C ++ z uporabo kazalca

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

Zanimive Članki...