Maison > développement back-end > C++ > le corps du texte

Le guide complet des fonctions virtuelles C++ : du concept à la mise en œuvre

WBOY
Libérer: 2024-04-28 15:27:02
original
512 Les gens l'ont consulté

Les fonctions virtuelles sont un mécanisme clé en POO, permettant aux classes dérivées de remplacer les fonctions de la classe de base et d'obtenir une liaison dynamique, apportant les avantages de l'évolutivité, du polymorphisme et de la réutilisation du code : Concept : les fonctions virtuelles sont déclarées dans la classe de base et marquées comme dérivées virtuelles ; les classes peuvent remplacer les fonctions virtuelles et fournir leurs propres implémentations. Liaison dynamique : C++ utilise la liaison dynamique pour déterminer au moment de l'exécution quelle implémentation de fonction virtuelle appeler. Avantages : les fonctions virtuelles améliorent l'extensibilité, le polymorphisme et la réutilisation du code, vous permettant de créer facilement des classes dérivées et d'effectuer des comportements spécifiques sur différentes instances de classe.

C++ 虚拟函数完全指南:从概念到实现

Guide complet des fonctions virtuelles en C++ : du concept à la mise en œuvre

Introduction

Les fonctions virtuelles sont un mécanisme orienté objet (POO) de base qui permet aux classes dérivées d'hériter et de remplacer les fonctions d'une base. classe . Cela vous permet de créer du code flexible et extensible qui présente différents comportements pour différentes instances de classe.

Concept

Les fonctions virtuelles en les déclarant dans la classe de base et en les marquant avec le virtual mot-clé :

class Base {
public:
    virtual void print() { cout << "Base::print()" << endl; }
};
Copier après la connexion

Les classes dérivées peuvent remplacer les fonctions virtuelles, fournissant leur propre implémentation :

class Derived : public Base {
public:
    virtual void print() override { cout << "Derived::print()" << endl; }
};
Copier après la connexion

Liaison dynamique

Utilisations C++ un mécanisme de liaison dynamique pour déterminer l'implémentation de la fonction virtuelle à appeler au moment de l'exécution. Lorsque vous appelez une fonction virtuelle, le compilateur insère un appel indirect qui résout l'implémentation correcte de la fonction au moment de l'exécution.

Avantages

L'utilisation de fonctions virtuelles présente certains avantages :

  • Extensibilité : Vous pouvez facilement créer de nouvelles classes dérivées pour les classes de base existantes sans modifier le code de la classe de base.
  • Polymorphisme : Les fonctions virtuelles permettent à différents types d'objets de répondre différemment au même appel de fonction.
  • Réutilisation du code : Vous pouvez réduire la duplication de code en définissant des fonctions virtuelles et en laissant les classes dérivées fournir des implémentations spécifiques à la classe.

Cas pratique

Créer une classe de forme abstraite Shape et définir une fonction virtuelle print() :

class Shape {
public:
    virtual void print() = 0;
};
Copier après la connexion

Créer une classe rectangle Rectangle, hériter de Shape et remplacer print() :

class Rectangle : public Shape {
public:
    void print() override { cout << "Rectangle" << endl; }
};
Copier après la connexion

Créer une classe Shape en cercle Circle, hérite de Shape et remplace print() :

class Circle : public Shape {
public:
    void print() override { cout << "Circle" << endl; }
};
Copier après la connexion

Dans la fonction main(), vous pouvez créer un tableau d'objets Shape et utiliser sa méthode print() :

int main() {
    Shape* shapes[] = { new Rectangle(), new Circle() };

    for (Shape* shape : shapes) {
        shape->print();
    }

    return 0;
}
Copier après la connexion

Cela affichera :

Rectangle
Circle
Copier après la connexion

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