Maison > développement back-end > C++ > Une fonction C++ peut-elle être déclarée virtuelle ? Quel est le rôle des fonctions virtuelles ?

Une fonction C++ peut-elle être déclarée virtuelle ? Quel est le rôle des fonctions virtuelles ?

王林
Libérer: 2024-04-19 18:06:02
original
704 Les gens l'ont consulté

Les fonctions virtuelles en C++ permettent aux classes dérivées de redéfinir les méthodes héritées des classes de base pour réaliser le polymorphisme. La syntaxe est la suivante : déclarez une fonction virtuelle avec le mot-clé virtual dans la classe de base et redéfinissez-la avec override dans la classe dérivée. En appelant une fonction virtuelle via un pointeur ou une référence, un objet de classe dérivée peut appeler une fonction virtuelle de classe de base. Les principales fonctions des fonctions virtuelles comprennent : la réalisation du polymorphisme, la prise en charge de la liaison dynamique et la fourniture d'abstraction.

C++ 函数可以声明为虚函数吗?虚函数的作用是什么?

Fonctions virtuelles en C++

Introduction

Une fonction virtuelle est un type spécial de fonction membre qui permet à une classe dérivée de redéfinir des méthodes héritées d'une classe de base. Cela permet le polymorphisme, c'est-à-dire que les objets de classe dérivés peuvent être traités de la même manière que les objets de classe de base.

Syntaxe

Les fonctions virtuelles sont déclarées dans la classe de base, à l'aide du mot-clé virtual : virtual 关键字:

class Base {
public:
  virtual void func() { /* ... */ }
};
Copier après la connexion

在派生类中,可以重新定义虚函数:

class Derived : public Base {
public:
  void func() override { /* ... */ }
};
Copier après la connexion

虚函数调用通过指针或引用完成,因此派生类对象可以调用父类中的虚函数:

Base* base = new Derived;
base->func(); // 调用 Derived::func()
Copier après la connexion

实战案例

考虑以下示例:

class Shape {
public:
  virtual double area() const = 0;
};

class Circle : public Shape {
public:
  Circle(double radius) : _radius(radius) {}
  double area() const override { return _radius * _radius * 3.14; }
  double _radius;
};

class Square : public Shape {
public:
  Square(double side) : _side(side) {}
  double area() const override { return _side * _side; }
  double _side;
};

int main() {
  Shape* shapes[] = {new Circle(5), new Square(4)};
  double total_area = 0;
  for (Shape* shape : shapes) {
    total_area += shape->area();
  }
  std::cout << "Total area: " << total_area << std::endl;
}
Copier après la connexion

此示例中,基类 Shape 定义了一个抽象函数 area(),派生类 CircleSquare 提供自己的实现。主函数创建一个 Shaperrreee

Dans les classes dérivées, les fonctions virtuelles peuvent être redéfinies :

rrreeeLes appels de fonctions virtuelles sont effectués via pointeurs ou La référence est complète, donc l'objet de classe dérivé peut appeler la fonction virtuelle dans la classe parent : rrreee

Exemple pratique

  • Considérons l'exemple suivant : rrreeeDans cet exemple, la classe de base Shape définit une fonction d'abstraction area(), les classes dérivées Circle et Square fournissent leur propre implémentation. La fonction principale crée un tableau de pointeurs Shape pointant vers des objets de la classe dérivée et calcule la surface totale via des appels de fonction virtuelle.
  • Fonction
  • Les principales fonctions des fonctions virtuelles incluent :
Implémentation du polymorphisme : 🎜Autoriser les objets de classe dérivés à interagir avec les objets de classe de base de manière commune. 🎜🎜🎜Prise en charge de la liaison dynamique : 🎜Liez les appels de fonction au moment de l'exécution et appelez les méthodes de classe dérivées en fonction du type d'objet réel. 🎜🎜🎜Fournir l'abstraction : 🎜Les classes de base peuvent définir des méthodes abstraites qui sont concrètement implémentées par des classes dérivées. 🎜🎜

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