Maison > Article > développement back-end > Fonctions virtuelles C++ et classes de base abstraites : exploration des principes fondamentaux de la programmation polymorphe
En C++, le polymorphisme est obtenu grâce à des fonctions virtuelles et des classes de base abstraites. Les fonctions virtuelles permettent de remplacer les fonctions des classes de base dans les classes dérivées, tandis que les classes de base abstraites contiennent des fonctions virtuelles pures, obligeant les classes dérivées à fournir des implémentations. Cela permet une programmation polymorphe en utilisant un pointeur de classe de base pour accéder à un objet de classe dérivé et en appelant la méthode appropriée en fonction du type réel de l'objet.
Le polymorphisme est un concept clé de la programmation orientée objet (POO), qui permet aux objets de répondre au même message de différentes manières. En C++, nous utilisons des fonctions virtuelles et des classes de base abstraites pour réaliser le polymorphisme.
Définition : Une fonction virtuelle est une fonction membre déclarée dans une classe de base mais implémentée uniquement dans une classe dérivée. Lorsqu'une fonction virtuelle est appelée via un pointeur de classe de base, l'implémentation de la classe dérivée est appelée.
Syntaxe : le mot-clé
class Base { public: virtual void print() const; }; class Derived : public Base { public: virtual void print() const override; };
override
indique que nous remplaçons la fonction virtuelle de la classe de base. override
关键字表明我们正在覆盖基类的虚拟函数。
定义:抽象基类是至少包含一个纯虚函数的基类。纯虚函数没有定义,仅由派生类实现。
语法:
class Base { public: virtual void f() const = 0; };
考虑一个形状层次结构,其中每个形状类都具有计算其面积的 area()
Définition :
Une classe de base abstraite est une classe de base qui contient au moins une fonction virtuelle pure. Les fonctions virtuelles pures ne sont pas définies et ne sont implémentées que par des classes dérivées.Syntaxe :
class Shape { public: virtual double area() const = 0; };Exemple pratique : Hiérarchie des classes de formeConsidérez une hiérarchie de formes où chaque classe de forme a une méthode
area()
qui calcule son aire.
class Circle : public Shape { public: Circle(double radius) : _radius(radius) {} double area() const override { return M_PI * _radius * _radius; } private: double _radius; }; 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() { Shape* s1 = new Circle(5); Shape* s2 = new Rectangle(3, 4); std::cout << "Circle area: " << s1->area() << std::endl; std::cout << "Rectangle area: " << s2->area() << std::endl; return 0; }
Circle area: 78.5398 Rectangle area: 12🎜Sortie : 🎜rrreee🎜Avantages🎜🎜🎜Autorise le poly accès morphique aux objets de classe dérivés 🎜🎜 Améliorer le code réutilisabilité et évolutivité🎜🎜Supporte le découplage et la maintenance du code🎜🎜
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!