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
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é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!