Maison > développement back-end > C++ > le corps du texte

Réécriture de fonctions C++ : découvrir les secrets de la couverture comportementale en héritage

WBOY
Libérer: 2024-04-30 15:12:02
original
841 Les gens l'ont consulté

La réécriture de fonctions se produit lorsqu'une classe dérivée définit une fonction du même nom et implémente une fonction différente. Les règles incluent : Utilisez le mot-clé override. Le nom, les paramètres et le type de retour sont les mêmes que ceux de la fonction de classe de base. Les droits d'accès ne doivent pas être inférieurs à ceux des fonctions de la classe de base. Grâce à la substitution, les classes dérivées peuvent remplacer le comportement de la classe de base, réaliser un polymorphisme et appeler dynamiquement des méthodes du même nom dans différentes classes dérivées.

C++ 函数重写:揭开继承中的行为覆盖秘籍

Contrôle de fonction C++ : découvrir les secrets de la substitution de comportement dans l'héritage

En C++, la substitution de fonction est une fonctionnalité clé pour obtenir un comportement polymorphe par héritage. Le remplacement de fonction se produit lorsqu'une classe dérivée définit une fonction portant le même nom que sa classe de base mais avec une implémentation différente.

Syntaxe et règles

Afin de remplacer les fonctions de la classe de base, les classes dérivées doivent utiliser le mot-clé override. Par exemple : override 关键字。例如:

class Base {
public:
    virtual void print() {
        cout << "Base class print()" << endl;
    }
};

class Derived : public Base {
public:
    virtual void print() override {
        cout << "Derived class print()" << endl;
    }
};
Copier après la connexion

函数重写的规则如下:

  • 派生类函数必须具有相同名称、参数列表和返回类型。
  • 派生类函数必须使用 override 关键字。
  • 派生类函数的访问权限不得低于基类函数。

实战案例

考虑一个形状抽象类和它的两个派生类矩形和圆。

class Shape {
public:
    virtual double getArea() = 0;
};

class Rectangle : public Shape {
public:
    double width, height;

    Rectangle(double w, double h) : width(w), height(h) {}

    override double getArea() {
        return width * height;
    }
};

class Circle : public Shape {
public:
    double radius;

    Circle(double r) : radius(r) {}

    override double getArea() {
        return M_PI * radius * radius;
    }
};

int main() {
    Rectangle rect(5, 3);
    Circle circle(4);

    Shape* shapes[] = {&rect, &circle};

    for (auto shape : shapes) {
        cout << "Shape area: " << shape->getArea() << endl;
    }
}
Copier après la connexion

在这个示例中,Shape 类定义了一个抽象方法 getArea(),由派生类 RectangleCircle 重写以提供实际的面积计算。通过多态,我们可以使用 shapes 数组中的基类指针调用 getArea()rrreee

Les règles de réécriture des fonctions sont les suivantes : 🎜
  • Les fonctions de classe dérivées doivent avoir le même nom, la même liste de paramètres et le même type de retour.
  • Les fonctions de classe dérivées doivent utiliser le mot clé override.
  • Les autorisations d'accès des fonctions de classe dérivées ne doivent pas être inférieures à celles des fonctions de classe de base.
🎜Cas pratique🎜🎜Considérons une classe abstraite de forme et ses deux classes dérivées rectangle et cercle. 🎜rrreee🎜Dans cet exemple, la classe Shape définit une méthode abstraite getArea(), qui est utilisée par les classes dérivées Rectangle et Cercle Remplacé pour fournir des calculs de surface réels. Avec le polymorphisme, nous pouvons calculer et afficher dynamiquement les aires de différentes formes en appelant la méthode <code>getArea() en utilisant le pointeur de classe de base dans le tableau shapes. 🎜

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal