Anularea funcției C ++

În acest tutorial, vom afla despre suprascrierea funcției în C ++ cu ajutorul exemplelor.

După cum știm, moștenirea este o caracteristică a OOP care ne permite să creăm clase derivate dintr-o clasă de bază. Clasele derivate moștenesc caracteristicile clasei de bază.

Să presupunem că aceeași funcție este definită atât în ​​clasa derivată, cât și în clasa bazată. Acum, dacă numim această funcție folosind obiectul clasei derivate, funcția clasei derivate este executată.

Acest lucru este cunoscut sub numele de funcție suprascriere în C ++. Funcția din clasa derivată anulează funcția din clasa de bază.

Exemplul 1: suprasolicitarea funcției 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; )

Ieșire

 Funcție derivată

Aici, aceeași funcție print()este definită în ambele Baseși în Derivedclase.

Deci, atunci când apelăm print()de la Derivedobiectul derivat1, de print()la Derivedse execută prin suprascrierea funcției în Base.

Funcționarea suprasolicitării funcției în C ++

Accesați funcția suprascrisă în C ++

Pentru a accesa funcția suprascrisă a clasei de bază, folosim operatorul de rezoluție a scopului ::.

De asemenea, putem accesa funcția suprascrisă utilizând un pointer al clasei de bază pentru a indica un obiect al clasei derivate și apoi apelând funcția din acel pointer.

Exemplul 2: Funcția suprascrisă de acces C ++ la clasa de bază

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

Ieșire

 Funcție derivată Funcție de bază

Aici, această afirmație

 derived2.Base::print();

accesează print()funcția clasei Base.

Accesați funcția suprascrisă utilizând obiectul clasei derivate în C ++

Exemplul 3: Funcția suprascrisă de apel C ++ din clasa derivată

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

Ieșire

 Funcție derivată Funcție de bază

În acest program, am numit funcția suprascrisă în interiorul Derivedclasei în sine.

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

Observați codul Base::print();, care apelează funcția suprascrisă în interiorul Derivedclasei.

Accesați funcția suprascrisă în clasa derivată din C ++

Exemplul 4: Funcția suprasolicitată apel C ++ folosind indicatorul

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

Articole interesante...