Maison  >  Article  >  développement back-end  >  Réécriture de fonctions C++ en pratique : une astuce pour implémenter des fonctions spécifiques aux sous-classes

Réécriture de fonctions C++ en pratique : une astuce pour implémenter des fonctions spécifiques aux sous-classes

WBOY
WBOYoriginal
2024-05-01 13:36:02908parcourir

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.

C++ 函数重写实战:实现子类专属功能的妙招

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 基类,表示一个通用形状。派生类 CircleRectangle 分别表示圆形和矩形。我们需要计算这些形状的面积。

基类 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

在这个示例中,CircleRectangle 类重写了 Shape 类中定义的 area()

🎜Classe de base Shape🎜🎜rrreee🎜🎜Classe dérivée Circle🎜🎜rrreee🎜🎜Classe dérivée Rectangle🎜🎜rrreee🎜🎜Utilisation 🎜🎜🎜Nous pouvons utiliser ces classes pour calculer l'aire de différentes formes 🎜r : rreee🎜 Sortie : 🎜rrreee 🎜Dans cet exemple, les classes 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!

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
Article précédent:Que signifie n+=2 en C++Article suivant:Que signifie n+=2 en C++