Heim > Backend-Entwicklung > C++ > Hauptteil

Virtuelle C++-Funktionen und virtuelle Vererbung: Die Komplexität der Mehrfachvererbung aufdecken

王林
Freigeben: 2024-04-28 21:03:01
Original
479 Leute haben es durchsucht

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.

C++ 虚拟函数与虚继承:揭示多重继承中的复杂性

Virtuelle C++-Funktionen und virtuelle Vererbung: Aufdecken der Komplexität der Mehrfachvererbung

Virtuelle Funktionen

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;
};
Nach dem Login kopieren

Virtuelle Vererbung

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; }
};
Nach dem Login kopieren

Virtuelle Vererbung stellt sicher, dass in jeder Basisklasse (Animal)在派生类(SiberianHusky) nur eine Instanz vorhanden ist, und vermeidet so das Diamant-Vererbungsproblem.

Praktischer Koffer

#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;
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage