Remplacement de fonction C++
Remplacer les fonctions C++
Dans ce didacticiel, nous allons apprendre à remplacer les 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.
Ceci est connu sous le nom de remplacement de fonction en C++. La fonction dans la classe dérivée remplace la fonction dans la classe de base.
Exemple 1 :Remplacement de fonction C++
// C++ program to demonstrate function overriding
#include <iostream>
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;
}
Sortie
Derived Function
Ici, la même fonction print()
est défini à la fois dans Base
et Derived
cours.
Ainsi, lorsque nous appelons print()
du Derived
objet dérivé1 , le print()
à partir de Derived
est exécuté en remplaçant la fonction dans Base
.
Comme nous pouvons le voir, la fonction a été remplacée car nous avons appelé la fonction à partir d'un objet du Derived
classe.
Si nous avions appelé le print()
fonction à partir d'un objet du Base
classe, la fonction n'aurait pas été remplacée.
// Call function of Base class
Base base1;
base1.print(); // Output: Base Function
Fonction d'accès prioritaire en C++
Pour accéder à la fonction surchargée de la classe de base, nous utilisons l'opérateur de résolution de portée ::
.
Nous pouvons également accéder à la fonction surchargé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 d'accès C++ remplacée à la classe de base
// C++ program to access overridden function
// in main() using the scope resolution operator ::
#include <iostream>
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;
}
Sortie
Derived Function Base Function
Tiens, cette déclaration
derived2.Base::print();
accède au print()
fonction de la classe Base.
Exemple 3 :Appel C++ d'une fonction remplacée à partir d'une classe dérivée
// C++ program to call the overridden function
// from a member function of the derived class
#include <iostream>
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;
}
Sortie
Derived Function Base Function
Dans ce programme, nous avons appelé la fonction redéfinie à l'intérieur du Derived
classe elle-même.
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
Base::print();
}
};
Remarquez le code Base::print();
, qui appelle la fonction remplacée à l'intérieur du Derived
classe.
Exemple 4 :Appel C++ d'une fonction remplacée à 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 <iostream>
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;
// pointer of Base type that points to derived1
Base* ptr = &derived1;
// call function of Base class using ptr
ptr->print();
return 0;
}
Sortie
Base Function
Dans ce programme, nous avons créé un pointeur de Base
type nommé ptr . Ce pointeur pointe vers le Derived
objet dérivé1 .
// pointer of Base type that points to derived1
Base* ptr = &derived1;
Lorsque nous appelons le print()
fonction utilisant ptr , il appelle la fonction remplacée à partir de Base
.
// call function of Base class using ptr
ptr->print();
C'est parce que même si ptr pointe vers un Derived
objet, il est en fait de Base
taper. Ainsi, il appelle la fonction membre de Base
.
Afin de remplacer le Base
fonction au lieu d'y accéder, nous devons utiliser des fonctions virtuelles dans le Base
classe.
Langue C