Maison  >  Article  >  développement back-end  >  Comment implémenter le polymorphisme dans la conception de classes C++ ?

Comment implémenter le polymorphisme dans la conception de classes C++ ?

WBOY
WBOYoriginal
2024-06-03 19:23:00579parcourir

Le polymorphisme permet aux classes dérivées d'avoir des comportements différents tout en partageant la même interface. Les étapes pour y parvenir incluent : la création de classes de base, de classes dérivées, de fonctions virtuelles et l'utilisation de pointeurs de classe de base. L'exemple de code montre comment utiliser la hiérarchie des classes de forme (Shape). , Rectangle, Cercle) pour réaliser le polymorphisme et calculer l'aire totale de différentes formes.

Comment implémenter le polymorphisme dans la conception de classes C++ ?

Conception de classes pour implémenter le polymorphisme en C++

Qu'est-ce que le polymorphisme ?

Le polymorphisme permet aux classes dérivées et aux classes de base d'avoir des comportements différents tout en partageant la même interface. Il fournit un moyen élégant de créer des collections d’objets ayant un comportement similaire mais des implémentations différentes.

Étapes pour implémenter le polymorphisme :

  1. Créer une classe de base : Définir une interface commune que les classes dérivées partageront.
  2. Classes dérivées : Créez des classes dérivées à partir des classes de base pour implémenter des comportements spécifiques.
  3. Fonction virtuelle : Déclarez une fonction virtuelle dans la classe de base et redéfinissez-la dans la classe dérivée. Cela permet aux appels de fonction d'être liés dynamiquement au moment de l'exécution.
  4. Pointeur de classe de base : Utilisez des pointeurs de classe de base ou des références pour contenir des objets de classe dérivés afin d'obtenir le polymorphisme.

Cas pratique :

Considérons une hiérarchie de classes de formes :

class Shape {
public:
    virtual double area() = 0; // 纯虚函数(必须在派生类中重新定义)
};

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : width_(width), height_(height) {}
    double area() override { return width_ * height_; }
private:
    double width_;
    double height_;
};

class Circle : public Shape {
public:
    Circle(double radius) : radius_(radius) {}
    double area() override { return 3.14 * radius_ * radius_; }
private:
    double radius_;
};

Usage :

// 创建不同形状的集合
vector<Shape*> shapes;
shapes.push_back(new Rectangle(2.0, 3.0));
shapes.push_back(new Circle(4.0));

// 使用基类指针计算总面积
double totalArea = 0.0;
for (Shape* shape : shapes) {
    totalArea += shape->area(); // 使用多态性动态绑定函数调用
}

// 输出总面积
cout << "Total area: " << totalArea << endl;

Sortie :

Total area: 37.68

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