Maison >développement back-end >C++ >Réécriture de fonctions C++ en pratique : une astuce pour implémenter des fonctions spécifiques aux sous-classes
La réécriture de fonctions permet aux sous-classes de redéfinir les fonctions du même nom de la classe de base pour implémenter des fonctions spécifiques à la sous-classe : sur la base de la recherche de nom et de la correspondance de type, lorsqu'une sous-classe définit une fonction du même nom, la fonction de la classe de base sera réécrite. Cela permet aux sous-classes de fournir différentes implémentations, par exemple les classes Circle et Rectangle dans l'exemple remplacent la fonction Area() de la classe Shape pour calculer leur propre aire.
Réécriture de fonctions C++ : implémentation de fonctions spécifiques aux sous-classes
La réécriture de fonctions est un mécanisme important en C++, qui permet aux sous-classes de redéfinir le comportement des fonctions du même nom dans la classe de base. Ceci est utile pour définir des fonctionnalités spécifiques spécifiques à une sous-classe.
Principe
La réécriture des fonctions est basée sur la recherche de noms et des règles de correspondance de types. Lorsqu'une fonction est appelée, le compilateur recherche dans la portée une fonction portant un nom correspondant. Si plusieurs fonctions surchargées sont trouvées, le principe de la meilleure correspondance est utilisé pour la sélection.
Si une sous-classe définit une fonction avec le même nom que la classe de base, la fonction de la sous-classe remplacera la fonction de la classe de base. Cela permet aux sous-classes de fournir une implémentation différente de celle de la classe de base.
Cas pratique
Considérons un scénario dans lequel nous avons une classe de base Shape
qui représente une forme générique. Les classes dérivées Circle
et Rectangle
représentent respectivement des cercles et des rectangles. Nous devons calculer l'aire de ces formes. Shape
基类,表示一个通用形状。派生类 Circle
和 Rectangle
分别表示圆形和矩形。我们需要计算这些形状的面积。
基类 Shape
class Shape { public: virtual double area() const = 0; // 纯虚函数 };
派生类 Circle
class Circle : public Shape { public: Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } private: double radius; };
派生类 Rectangle
class Rectangle : public Shape { public: Rectangle(double width, double height) : width(width), height(height) {} double area() const override { return width * height; } private: double width, height; };
使用
我们可以使用这些类来计算不同形状的面积:
int main() { Circle circle(5.0); Rectangle rectangle(3.0, 4.0); std::cout << "Area of circle: " << circle.area() << std::endl; std::cout << "Area of rectangle: " << rectangle.area() << std::endl; return 0; }
输出:
Area of circle: 78.5398 Area of rectangle: 12.0
在这个示例中,Circle
和 Rectangle
类重写了 Shape
类中定义的 area()
Circle
et Rectangle
remplacent la fonction area()
définie dans la Shape
classe. Cela nous permet de mettre en œuvre une logique de calcul de surface spécifique à chaque forme. 🎜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!