Maison > développement back-end > C++ > 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
Libérer: 2024-04-28 11:30:02
original
421 Les gens l'ont consulté

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;
};
Copier après la connexion

override indique que nous remplaçons la fonction virtuelle de la classe de base. override 关键字表明我们正在覆盖基类的虚拟函数。

抽象基类

定义:抽象基类是至少包含一个纯虚函数的基类。纯虚函数没有定义,仅由派生类实现。

语法:

class Base {
public:
    virtual void f() const = 0;
};
Copier après la connexion

实战案例:形状类层次

考虑一个形状层次结构,其中每个形状类都具有计算其面积的 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;
};
Copier après la connexion
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;
    };
    Copier après la connexion
  • 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;
    }
    Copier après la connexion
  • Fonction principale :
🎜
Circle area: 78.5398
Rectangle area: 12
Copier après la connexion
🎜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!

É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