Maison >développement back-end >C++ >Révéler le principe de la réécriture des fonctions : comment les sous-classes contrôlent le comportement des classes parentes

Révéler le principe de la réécriture des fonctions : comment les sous-classes contrôlent le comportement des classes parentes

WBOY
WBOYoriginal
2024-05-04 09:06:021034parcourir

Question : Quel est le principe de la réécriture de fonctions ? Réponse : La substitution de fonctions permet aux sous-classes de contrôler le comportement de la classe parent en redéfinissant les méthodes héritées de la classe parent en déclarant une méthode portant le même nom et en utilisant le mot-clé override. Étapes : Déclarez la méthode virtuelle dans le constructeur de la sous-classe et marquez-la avec le mot-clé virtual. Spécifiez le type de valeur de retour, le nom et la liste de paramètres de la méthode, qui sont identiques à ceux de la méthode de classe parent. Utilisez le mot-clé override pour déclarer explicitement la méthode comme remplacement.

Révéler le principe de la réécriture des fonctions : comment les sous-classes contrôlent le comportement des classes parentes

Révélation du principe de la substitution de fonctions : comment les sous-classes contrôlent le comportement des classes parents

La substitution est un concept crucial en programmation orientée objet, qui permet aux sous-classes de redéfinir des méthodes héritées des classes parents. Grâce à la substitution, une sous-classe peut personnaliser le comportement de sa classe parent tout en conservant la compatibilité avec le code de la classe de base.

Comprendre le remplacement

Le remplacement est déclaré dans le constructeur de la sous-classe, au format suivant :

virtual <return type> <function name>(<parameter list>) override;
  • virtuel Le mot-clé indique que la méthode peut être surchargée par la sous-classe. virtual 关键字表示该方法可以被子类重写。
  • <return type></return> 指定方法的返回值类型。
  • <function name></function> 是被重写的方法名称。
  • <parameter list></parameter> 是方法的参数列表。
  • override 关键字明确声明该方法是对父类方法的重写。

实战案例

为了说明函数重写,我们创建一个带有 draw() 方法的 Shape 基类和一个名为 Circle 的子类:

class Shape {
public:
    virtual void draw() { cout << "Drawing Shape" << endl; }
};

class Circle : public Shape {
public:
    void draw() override { cout << "Drawing Circle" << endl; }
};

Shape 类的 draw() 方法被声明为 virtual,这意味着它可以被 Circle 类重写。在 Circle 类中,draw() 方法被重新定义,打印出 "Drawing Circle"。

重写工作原理

当子类对象调用 draw() 方法时,编译器会动态选择与该对象关联的适当实现。如果对象是一个 Circle 实例,则会调用重写后的 Circle::draw() 方法。否则,它将调用基类的 Shape::draw() 方法。

优点

函数重写提供了以下优点:

  • 允许子类根据需要定制其父类行为。
  • 维护代码的可扩展性和可重用性。
  • 促进代码重构,无需修改基类。

注意事项

重写时应遵循以下注意事项:

  • 方法签名(返回类型和参数列表)必须与父类方法相同。
  • 重写的方法不能比其父类方法的访问权限级别更严格。
  • 重写的方法通常使用 override
  • <return type></return> Spécifie le type de valeur de retour de la méthode.
🎜<function name></function> est le nom de la méthode remplacée. 🎜🎜<parameter list></parameter> est la liste des paramètres de la méthode. 🎜🎜Le mot-clé override déclare explicitement que la méthode est un remplacement de la méthode de la classe parent. 🎜🎜🎜🎜Cas pratique🎜🎜🎜Pour illustrer la réécriture de fonctions, nous créons une classe de base Shape avec une méthode draw() et une classe nommée Circle Subclasses of  : 🎜rrreee🎜 La méthode draw() de la classe Shape est déclarée comme virtuelle, ce qui signifie qu'elle peut être Circle. Dans la classe Circle, la méthode draw() est redéfinie pour imprimer "Drawing Circle". 🎜🎜🎜Comment fonctionne la substitution🎜🎜🎜Lorsqu'un objet de sous-classe appelle la méthode draw(), le compilateur sélectionne dynamiquement l'implémentation appropriée associée à l'objet. Si l'objet est une instance de Circle, la méthode Circle::draw() remplacée est appelée. Sinon, il appelle la méthode Shape::draw() de la classe de base. 🎜🎜🎜 Avantages 🎜🎜🎜 La substitution de fonctions offre les avantages suivants : 🎜🎜🎜 Permet aux sous-classes de personnaliser le comportement de leur classe parent selon leurs besoins. 🎜🎜Maintenir l'évolutivité et la réutilisabilité du code. 🎜🎜Facilite la refactorisation du code sans modifier les classes de base. 🎜🎜🎜🎜Notes🎜🎜🎜Les considérations suivantes doivent être suivies lors de la substitution : 🎜🎜🎜La signature de la méthode (type de retour et liste de paramètres) doit être la même que celle de la méthode de la classe parent. 🎜🎜Une méthode surchargée ne peut pas avoir un niveau d'accès plus restrictif que sa méthode de classe parent. 🎜🎜Les méthodes overridden utilisent généralement le mot-clé override pour fournir une vérification au moment de la compilation et éviter les remplacements accidentels. 🎜🎜

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