Maison  >  Article  >  développement back-end  >  Fonctions virtuelles C++ et classes de base abstraites : exploration des principes fondamentaux de la programmation polymorphe

Fonctions virtuelles C++ et classes de base abstraites : exploration des principes fondamentaux de la programmation polymorphe

WBOY
WBOYoriginal
2024-04-28 11:30:02397parcourir

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.

C++ 虚拟函数与抽象基类:探究多态编程的基础

Fonctions virtuelles C++ et classes de base abstraites : les bases de la programmation polymorphe

Vue d'ensemble

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.

Fonction Virtuelle

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()

Classe de base abstraite

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 forme

Considérez une hiérarchie de formes où chaque classe de forme a une méthode area() qui calcule son aire.

Classe de base Forme :

    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;
    };
  • Classes dérivées Cercle et Rectangle :
  • 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;
    }
  • Fonction principale :
🎜
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!

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