In questo tutorial impareremo come sovrascrivere le funzioni in C ++ con l'aiuto di esempi.
Come sappiamo, l'ereditarietà è una caratteristica dell'OOP che ci consente di creare classi derivate da una classe base. Le classi derivate ereditano le caratteristiche della classe base.
Supponiamo che la stessa funzione sia definita sia nella classe derivata che nella classe basata. Se ora chiamiamo questa funzione utilizzando l'oggetto della classe derivata, viene eseguita la funzione della classe derivata.
Questo è noto come funzione che sovrascrive in C ++. La funzione nella classe derivata sovrascrive la funzione nella classe base.
Esempio 1: sostituzione della funzione 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; )
Produzione
Funzione derivata
Qui, la stessa funzione print()
è definita in entrambe le classi Base
e Derived
.
Così, quando chiamiamo print()
dal Derived
derived1 oggetto, il print()
dal Derived
viene eseguito mediante l'override la funzione in Base
.
![](https://cdn.wiki-base.com/1143898/c_function_overriding.png.webp)
Accesso alla funzione sovrascritta in C ++
Per accedere alla funzione sovrascritta della classe base, utilizziamo l'operatore di risoluzione dell'ambito ::
.
Possiamo anche accedere alla funzione sovrascritta usando un puntatore della classe base per puntare a un oggetto della classe derivata e quindi chiamando la funzione da quel puntatore.
Esempio 2: funzione di override di accesso C ++ alla classe di base
// 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; )
Produzione
Funzione derivata Funzione di base
Ecco, questa dichiarazione
derived2.Base::print();
accede alla print()
funzione della classe Base.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_2.png.webp)
Esempio 3: funzione sostituita dalla chiamata C ++ dalla classe derivata
// 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; )
Produzione
Funzione derivata Funzione di base
In questo programma, abbiamo chiamato la funzione sovrascritta all'interno della Derived
classe stessa.
class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );
Notare il codice Base::print();
, che chiama la funzione sovrascritta all'interno della Derived
classe.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_3.png.webp)
Esempio 4: funzione sovrascritta chiamata C ++ tramite puntatore
// 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.