Maison  >  Article  >  développement back-end  >  Comment les fonctions virtuelles pures favorisent-elles le polymorphisme en C++ ?

Comment les fonctions virtuelles pures favorisent-elles le polymorphisme en C++ ?

PHPz
PHPzoriginal
2024-06-03 20:01:59971parcourir

En C++, les fonctions virtuelles pures sont déclarées mais non implémentées dans la classe de base, obligeant les classes dérivées à implémenter un comportement spécifique pour promouvoir le polymorphisme. Les classes dérivées doivent implémenter toutes les fonctions virtuelles pures, sinon elles doivent également devenir des classes abstraites. Les fonctions virtuelles pures garantissent le polymorphisme en garantissant que seules les classes qui implémentent toutes les fonctions virtuelles pures peuvent être utilisées comme pointeurs ou références à des classes abstraites. Dans des cas pratiques tels que le dessin graphique, il peut garantir que tous les objets de forme peuvent répondre aux appels draw(), atteindre le polymorphisme et améliorer l'évolutivité et la maintenabilité du code.

C++ 中纯虚函数如何促进多态性?

Fonctions virtuelles pures en C++ : la force motrice du polymorphisme

En C++, une fonction virtuelle pure est une fonction membre spéciale qui est déclarée mais non implémentée dans la classe de base. Il est utilisé dans les hiérarchies d'héritage pour forcer les classes dérivées à implémenter un comportement spécifique.

Comment fonctionnent les fonctions virtuelles pures

Lorsqu'une classe contient une ou plusieurs fonctions virtuelles pures, elle est appelée une classe abstraite. Les classes dérivées doiventimplémenter toutes les fonctions virtuelles pures de la classe de base, sinon elles doivent également devenir des classes abstraites.

Si une classe dérivée n'implémente pas toutes les fonctions virtuelles pures de sa classe de base, l'instanciation de la classe dérivée générera une erreur. Cela garantit le polymorphisme car seules les classes qui implémentent toutes les fonctions virtuelles pures peuvent être utilisées comme pointeurs ou références à des classes abstraites.

Exemple de code C++

Considérons une hiérarchie d'héritage de forme avec une classe de base Drawable :

class Drawable {
public:
    virtual void draw() = 0;  // 纯虚函数
};

class Circle : public Drawable {
public:
    void draw() override;  // 实现 draw()
};

class Square : public Drawable {
public:
    void draw() override;  // 实现 draw()
};

Dans la classe de base Drawable, draw() est une fonction virtuelle pure. Cela signifie que les classes dérivées Circle et Square doivent implémenter draw() pour être instanciées.

Cas pratique : Dessin graphique

Supposons que vous disposiez de l'application de dessin suivante, dont l'une contient des objets de formes différentes :

#include <vector>

// 创建一个形状向量
std::vector<Drawable*> shapes;

// 添加形状到向量
shapes.push_back(new Circle());
shapes.push_back(new Square());

// 循环遍历形状并绘制它们
for (Drawable* shape : shapes) {
    shape->draw();
}

Puisque draw() est une fonction virtuelle pure, le programme peut garantir que toutes les formes les objets peuvent répondre aux appels draw(), réalisant ainsi le polymorphisme.

Conclusion

Les fonctions virtuelles pures sont un outil puissant pour promouvoir le polymorphisme en C++. Ils garantissent que les classes dérivées implémentent tous les comportements requis, augmentant ainsi l'évolutivité et la maintenabilité de votre code. Ils jouent un rôle clé dans les modèles de conception basés sur l'héritage et sont utilisés dans de nombreuses applications du monde réel.

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