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 Base
in Derived
razredih.
Torej, ko prikličemo print()
iz izpeljanega Derived
predmeta1, se print()
iz Derived
izvaja s preglasitvijo funkcije v Base
.
![](https://cdn.wiki-base.com/1143898/c_function_overriding.png.webp)
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.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_2.png.webp)
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 Derived
razreda.
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 Derived
razreda.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_3.png.webp)
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.