Remplacement de fonction C ++

Dans ce didacticiel, nous allons en apprendre davantage sur la substitution de fonctions en C ++ à l'aide d'exemples.

Comme nous le savons, l'héritage est une fonctionnalité de la POO qui nous permet de créer des classes dérivées à partir d'une classe de base. Les classes dérivées héritent des fonctionnalités de la classe de base.

Supposons que la même fonction soit définie à la fois dans la classe dérivée et dans la classe basée. Maintenant, si nous appelons cette fonction en utilisant l'objet de la classe dérivée, la fonction de la classe dérivée est exécutée.

C'est ce qu'on appelle le remplacement de fonction en C ++. La fonction de la classe dérivée remplace la fonction de la classe de base.

Exemple 1: remplacement de fonction 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; )

Production

 Fonction dérivée

Ici, la même fonction print()est définie dans les deux classes Baseet Derived.

Ainsi, lorsque nous appelons à print()partir de l' Derivedobjet dérivé1, le print()from Derivedest exécuté en remplaçant la fonction dans Base.

Fonctionnement du remplacement de fonction en C ++

Accéder à la fonction remplacée dans C ++

Pour accéder à la fonction remplacée de la classe de base, nous utilisons l'opérateur de résolution de portée ::.

Nous pouvons également accéder à la fonction remplacée en utilisant un pointeur de la classe de base pour pointer vers un objet de la classe dérivée, puis en appelant la fonction à partir de ce pointeur.

Exemple 2: Fonction remplacée par l'accès C ++ à la classe de 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; )

Production

 Fonction de base de la fonction dérivée

Ici, cette déclaration

 derived2.Base::print();

accède à la print()fonction de la classe Base.

Accéder à une fonction remplacée à l'aide d'un objet de classe dérivée en C ++

Exemple 3: Fonction remplacée d'appel C ++ à partir d'une classe dérivée

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

Production

 Fonction de base de la fonction dérivée

Dans ce programme, nous avons appelé la fonction surchargée à l'intérieur de la Derivedclasse elle-même.

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

Notez le code Base::print();, qui appelle la fonction remplacée à l'intérieur de la Derivedclasse.

Accéder à une fonction remplacée dans une classe dérivée en C ++

Exemple 4: Fonction remplacée par un appel C ++ à l'aide d'un pointeur

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

Articles intéressants...