Fonctions virtuelles : autorisez les classes dérivées à remplacer les fonctions des classes de base. Lorsque le pointeur de la classe de base pointe vers un objet de classe dérivée, la fonction virtuelle de la classe dérivée est appelée. Héritage virtuel : résolvez le problème de l'héritage du diamant dans l'héritage multiple. Assurez-vous qu'une seule instance de chaque classe de base existe dans la classe dérivée.
Une fonction virtuelle est un type spécial de fonction membre en C++ qui permet à une classe dérivée de remplacer les fonctions d'une classe de base. Lorsqu'un pointeur de classe de base ou une référence pointe vers un objet de classe dérivée, la fonction virtuelle de la classe dérivée sera appelée.
class Shape { public: virtual double area() const = 0; // 纯虚函数 }; class Rectangle : public Shape { public: Rectangle(double width, double height) : m_width(width), m_height(height) {} double area() const override { return m_width * m_height; } // 重写虚函数 private: double m_width; double m_height; };
L'héritage virtuel est une technique utilisée pour résoudre le problème d'héritage du diamant qui se produit dans l'héritage multiple (également connu sous le nom d'ambiguïté de l'héritage multiple).
class Animal { public: virtual void speak() const { cout << "Animal speaks" << endl; } }; class Dog : virtual public Animal { // 虚继承 public: void speak() const override { cout << "Dog barks" << endl; } }; class Cat : virtual public Animal { // 虚继承 public: void speak() const override { cout << "Cat meows" << endl; } }; class SiberianHusky : public Dog, public Cat { // 多重继承 public: void speak() const override { cout << "Siberian Husky howls" << endl; } };
L'héritage virtuel garantit qu'une seule instance existe dans chaque classe de base (Animal
)在派生类(SiberianHusky
), évitant ainsi le problème de l'héritage du diamant.
#include <iostream> using namespace std; class Shape { public: virtual double area() const = 0; }; class Rectangle : public Shape { public: Rectangle(double width, double height) : m_width(width), m_height(height) {} double area() const override { return m_width * m_height; } private: double m_width; double m_height; }; class Circle : public Shape { public: Circle(double radius) : m_radius(radius) {} double area() const override { return M_PI * m_radius * m_radius; } private: double m_radius; }; int main() { // 创建形状的父类指针 Shape* shape; // 创建矩形对象并将其分配给父类指针 shape = new Rectangle(5, 10); cout << "矩形面积:" << shape->area() << endl; // 创建圆形对象并将其分配给父类指针 shape = new Circle(3); cout << "圆形面积:" << shape->area() << endl; return 0; }
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!