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 Base
te Derived
klase.
Dakle, kada pozivamo print()
iz Derived
objekta izvedenog1, print()
iz Derived
se izvršava nadjačavanjem funkcije u Base
.
![](https://cdn.wiki-base.com/1143898/c_function_overriding.png.webp)
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.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_2.png.webp)
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 Derived
klase.
class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );
Primijetite kôd Base::print();
koji poziva nadjačanu funkciju unutar Derived
klase.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_3.png.webp)
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.