Ebben az oktatóanyagban példák segítségével megismerhetjük a C ++ nyelven a funkció felülírását.
Mint tudjuk, az öröklés az OOP egyik jellemzője, amely lehetővé teszi számunkra, hogy egy alaposztályból származtatott osztályokat hozzunk létre. A levezetett osztályok öröklik az alaposztály jellemzőit.
Tegyük fel, hogy ugyanazt a függvényt definiálják a származtatott osztályban és az alaposztályban egyaránt. Ha ezt a függvényt a származtatott osztály objektumával hívjuk meg, akkor a származtatott osztály függvénye végrehajtásra kerül.
Ez az úgynevezett függvény felülírja a C ++ - ban. A származtatott osztály függvénye felülírja az alaposztály függvényét.
1. példa: C ++ függvény felülírása
// 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; )
Kimenet
Származtatott függvény
Itt ugyanaz a funkciója print()
határozza meg mind Base
, és Derived
osztályok.
Tehát, amikor print()
a Derived
származtatott objektumból hívunk1, a print()
from Derived
a függvény felülbírálásával hajtódik végre Base
.

Hozzáférés felülbírált funkcióhoz C ++ nyelven
Az alaposztály felülbírált funkciójának eléréséhez a hatókör-felbontás operátort használjuk ::
.
A felülbírált függvényhez úgy is hozzáférhetünk, hogy az alaposztály mutatójával a származtatott osztály objektumára mutatunk, majd az adott mutatóból meghívjuk a függvényt.
2. példa: C ++ felülbírált funkció hozzáférése az alaposztályhoz
// 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; )
Kimenet
Származtatott függvény alapfunkció
Itt ez a kijelentés
derived2.Base::print();
hozzáfér az print()
alaposztály funkciójához.

3. példa: C ++ hívás felülbírált függvény származtatott osztályból
// 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; )
Kimenet
Származtatott függvény alapfunkció
Ebben a programban meghívtuk a felülbírált függvényt magában az Derived
osztályban.
class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );
Figyelje meg a kódot Base::print();
, amely meghívja az Derived
osztályon belüli felülbírált függvényt .

4. példa: C ++ hívás felülbírált funkció mutató segítségével
// 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.