Heim >Backend-Entwicklung >C++ >Virtuelle C++-Funktionen und virtuelle Vererbung: Die Komplexität der Mehrfachvererbung aufdecken
Virtuelle Funktionen: Erlauben Sie abgeleiteten Klassen, Funktionen in Basisklassen zu überschreiben. Wenn der Basisklassenzeiger auf ein abgeleitetes Klassenobjekt zeigt, wird die virtuelle Funktion der abgeleiteten Klasse aufgerufen. Virtuelle Vererbung: Lösen Sie das Diamant-Vererbungsproblem in der Mehrfachvererbung. Stellen Sie sicher, dass in der abgeleiteten Klasse nur eine Instanz jeder Basisklasse vorhanden ist.
Eine virtuelle Funktion ist eine spezielle Art von Memberfunktion in C++, die es einer abgeleiteten Klasse ermöglicht, Funktionen in einer Basisklasse zu überschreiben. Wenn ein Basisklassenzeiger oder eine Referenz auf ein abgeleitetes Klassenobjekt zeigt, wird die virtuelle Funktion der abgeleiteten Klasse aufgerufen.
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; };
Virtuelle Vererbung ist eine Technik zur Lösung des Diamantvererbungsproblems, das bei Mehrfachvererbung auftritt (auch als Mehrdeutigkeit der Mehrfachvererbung bekannt).
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; } };
Virtuelle Vererbung stellt sicher, dass in jeder Basisklasse (Animal
)在派生类(SiberianHusky
) nur eine Instanz vorhanden ist, und vermeidet so das Diamant-Vererbungsproblem.
#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; }
Das obige ist der detaillierte Inhalt vonVirtuelle C++-Funktionen und virtuelle Vererbung: Die Komplexität der Mehrfachvererbung aufdecken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!