Nadjačavanje funkcije C ++

U ovom uputstvu naučit ćemo o poništavanju funkcija u C ++ uz pomoć primjera.

Kao što znamo, nasljeđivanje je značajka OOP-a koja nam omogućuje stvaranje izvedenih klasa iz osnovne klase. Izvedene klase nasljeđuju značajke osnovne klase.

Pretpostavimo da je ista funkcija definirana i u izvedenoj klasi i u baziranoj klasi. Sada ako ovu funkciju pozovemo pomoću objekta izvedene klase, izvršava se funkcija izvedene klase.

To je poznato kao nadjačavanje funkcije u C ++-u. Funkcija u izvedenoj klasi nadjačava funkciju u osnovnoj klasi.

Primjer 1: Nadjačavanje 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; )

Izlaz

 Izvedena funkcija

Evo, ista funkcija print()je definirana u obje Basete Derivedklase.

Dakle, kada pozivamo print()iz Derivedobjekta izvedenog1, print()iz Derivedse izvršava nadjačavanjem funkcije u Base.

Rad nadjačavanja funkcija u C ++

Pristup nadjačanoj funkciji u C ++

Za pristup nadjačanoj funkciji osnovne klase koristimo operator razlučivosti opsega ::.

Također možemo pristupiti nadjačanoj funkciji korištenjem pokazivača osnovne klase za usmjeravanje na objekt izvedene klase, a zatim pozivanjem funkcije iz tog pokazivača.

Primjer 2: C ++ funkcija nadjačana za pristup osnovnoj klasi

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

Izlaz

 Izvedena funkcija Osnovna funkcija

Evo, ova izjava

 derived2.Base::print();

pristupa print()funkciji klase Base.

Pristup nadjačanoj funkciji pomoću objekta izvedene klase u C ++

Primjer 3: C ++ funkcija zamijenjena pozivima iz izvedene klase

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

Izlaz

 Izvedena funkcija Osnovna funkcija

U ovom smo programu pozvali nadjačanu funkciju unutar same Derivedklase.

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

Primijetite kôd Base::print();koji poziva nadjačanu funkciju unutar Derivedklase.

Pristup nadjačanoj funkciji unutar izvedene klase u C ++

Primjer 4: C ++ funkcija zamijenjena pozivom pomoću pokazivača

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

Zanimljivi članci...