Maison >développement back-end >C++ >Application pratique des fonctions virtuelles C++ : exemples de code et dépannage

Application pratique des fonctions virtuelles C++ : exemples de code et dépannage

WBOY
WBOYoriginal
2024-04-29 08:36:02852parcourir

Les fonctions virtuelles permettent de remplacer les fonctions de la classe de base dans les classes dérivées et d'appeler les fonctions appropriées en fonction du type d'objet au moment de l'exécution : Créer des fonctions virtuelles : utilisez le mot-clé virtual pour déclarer des fonctions dans la classe de base. Remplacer les fonctions virtuelles : utilisez le mot-clé override dans les classes dérivées pour remplacer les fonctions virtuelles de la classe de base. Appel réel : lorsqu'un objet de classe dérivé est pointé vers un pointeur ou une référence de classe de base, la version remplacée sera appelée. Fonction virtuelle découverte : si elle n'est pas remplacée, l'implémentation originale de la classe de base sera appelée. Appel avec pointeur ou référence : implémentez le polymorphisme, permettant à un pointeur ou une référence d'une classe de base de pointer vers un objet de classe dérivé, et appelez la fonction de substitution appropriée au moment de l'exécution.

C++ 虚拟函数实战应用:代码示例与解疑

Application pratique des fonctions virtuelles en C++ : exemples de code et dépannage

Introduction aux fonctions virtuelles

Les fonctions virtuelles sont un mécanisme de polymorphisme en C++. Il permet aux fonctions de la classe de base d'être remplacées dans la classe dérivée, permettant ainsi à la fonction appropriée d'être appelée au moment de l'exécution en fonction du type réel de l'objet.

Créer une fonction virtuelle

Pour créer une fonction virtuelle, vous devez déclarer la fonction dans la classe de base à l'aide du mot-clé virtuel, comme indiqué ci-dessous : virtual 关键字声明该函数,如下所示:

class Base {
public:
    virtual void print() {
        cout << "Base class" << endl;
    }
};

覆盖虚拟函数

在派生类中,可以使用 override 关键字覆盖基类中的虚拟函数,如下所示:

class Derived : public Base {
public:
    override void print() {
        cout << "Derived class" << endl;
    }
};

实战案例

考虑以下一个简单的示例:

#include <iostream>

using namespace std;

class Animal {
public:
    virtual void speak() {
        cout << "Animal speaks" << endl;
    }
};

class Dog : public Animal {
public:
    override void speak() {
        cout << "Dog barks" << endl;
    }
};

int main() {
    Animal* a = new Dog();
    a->speak();  // 输出:Dog barks
    return 0;
}

在这个示例中,基类 Animal 定义了 speak() 虚拟函数,它在 Dog 派生类中被覆盖。当我们通过 Animal* 指针调用 speak()rrreee

Remplacer la fonction virtuelle

Dans la classe dérivée, vous pouvez utiliser le mot-clé override pour remplacer les fonctions virtuelles dans une classe de base comme suit :

rrreeeUn exemple pratique

Considérez l'exemple simple suivant :

rrreee

Dans cet exemple, le la classe de base Animal définit la fonction virtuelle speak(), qui est remplacée dans les classes dérivées de Dog. Lorsque nous appelons la fonction speak() via le pointeur Animal*, la version remplacée est appelée, produisant "Le chien aboie".

Résolution de questions

Q : Pourquoi avez-vous besoin d'utiliser des pointeurs ou des références pour appeler des fonctions virtuelles ?

🎜🎜Réponse : afin d'obtenir le polymorphisme, un pointeur ou une référence de la classe de base peut pointer vers un objet de la classe dérivée, permettant ainsi d'appeler la fonction de substitution appropriée au moment de l'exécution. 🎜🎜🎜Q : Que se passe-t-il si les fonctions virtuelles ne sont pas remplacées dans les classes dérivées ? 🎜🎜🎜Réponse : Dans ce cas, l'implémentation d'origine dans la classe de base sera appelée. 🎜

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