Maison  >  Article  >  développement back-end  >  Lien entre la réécriture de fonctions et les fonctions virtuelles : une combinaison puissante de liaison dynamique dans l'héritage

Lien entre la réécriture de fonctions et les fonctions virtuelles : une combinaison puissante de liaison dynamique dans l'héritage

WBOY
WBOYoriginal
2024-05-04 11:15:01844parcourir

La réécriture de fonctions et les fonctions virtuelles fonctionnent ensemble pour obtenir une liaison dynamique en héritage. Lorsqu'une classe dérivée remplace une fonction virtuelle de la classe parent, la fonction substituée est appelée au moment de l'exécution en fonction du type réel de l'objet, même si la classe parent ne connaît pas l'existence de la classe dérivée au moment de la compilation.

Lien entre la réécriture de fonctions et les fonctions virtuelles : une combinaison puissante de liaison dynamique dans lhéritage

Lien entre la réécriture de fonctions et les fonctions virtuelles : une puissante combinaison de liaison dynamique dans l'héritage

En programmation orientée objet (POO), la réécriture de fonctions et les fonctions virtuelles sont deux concepts étroitement liés. Travaillez ensemble pour implémenter la dynamique. contraignant en matière d'héritage. La liaison dynamique permet à une référence d'une classe parent de pointer vers un objet de sa classe dérivée et d'appeler des méthodes remplacées dans la classe dérivée, même si la classe parent ne connaît pas l'existence de la classe dérivée au moment de la compilation.

Réécriture de fonctions

La réécriture de fonctions fait référence à la définition d'une fonction dans une classe dérivée avec le même nom et les mêmes paramètres que la classe parent. Lorsqu'un objet de classe dérivée est appelé, la méthode substituée dans la classe dérivée sera appelée, et non la méthode de la classe parent. Cela permet aux classes dérivées de modifier ou d'étendre le comportement de la classe parent.

Fonctions virtuelles

Les fonctions virtuelles sont des fonctions déclarées comme virtuelles dans la classe parent. Lorsqu'une classe dérivée remplace une fonction virtuelle, elle crée une fonction avec le même nom et les mêmes paramètres que la fonction de la classe parent. Cela indique au compilateur d'appeler la fonction correcte au moment de l'exécution en fonction du type réel de l'objet. virtual 的函数。当派生类重写虚拟函数时,它建立了一个与父类中的函数具有相同名称和参数的函数。这告诉编译器在运行时根据对象的实际类型调用正确的函数。

实战案例

考虑下面这个例子:

#include <iostream>

using namespace std;

class Animal {
public:
  virtual void speak() { cout << "Animal speaking" << endl; }
};

class Dog : public Animal {
public:
  void speak() override { cout << "Dog barking" << endl; }
};

int main() {
  Animal* animal = new Dog();  // 创建 Dog 对象,但使用 Animal 指针
  animal->speak();  // 调用 Dog 类的 speak() 方法
  return 0;
}

在这个例子中:

  • Animal 是父类,它定义了一个名为 speak 的虚拟函数。
  • Dog 是派生类,它重写了 speak 方法以实现不同的行为。
  • main 函数中,创建一个指向 Dog 对象的 Animal 指针。
  • 当调用 Animal 指针上的 speak 方法时,编译器将根据指向的实际 Dog 对象调用重写的 Dog::speak
Cas pratique

Considérons l'exemple suivant :

Dog barking
🎜Dans cet exemple : 🎜
  • Animal est la classe parent, qui définit une classe nommée speak . 🎜<li> <code>Dog est une classe dérivée qui remplace la méthode speak pour obtenir différents comportements. 🎜
  • Dans la fonction main, créez un pointeur Animal vers l'objet Dog. 🎜
  • Lors de l'appel de la méthode speak sur un pointeur Animal, le compilateur appellera le remplacé en fonction de l'objet <code>Dog réel a pointé vers la méthode >Dog::speak. 🎜🎜🎜Sortie : 🎜rrreee🎜Ce mécanisme nous permet d'appeler dynamiquement des fonctions remplacées en fonction du type d'objet réel, obtenant ainsi un système d'héritage flexible et extensible. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn