C ++ Funkció felülírása

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 Derivedosztályok.

Tehát, amikor print()a Derivedszármaztatott objektumból hívunk1, a print()from Deriveda függvény felülbírálásával hajtódik végre Base.

A funkció felülbírálása C ++ - ban

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.

Felülbírált függvény elérése a C ++ származtatott osztály objektumának használatával

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 Derivedosztá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 Derivedosztályon belüli felülbírált függvényt .

Hozzáférés felülbírált funkcióhoz a származtatott osztályon belül C ++ nyelven

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.

érdekes cikkek...