Heim  >  Artikel  >  Backend-Entwicklung  >  Kann eine C++-Funktion als virtuell deklariert werden? Welche Rolle spielen virtuelle Funktionen?

Kann eine C++-Funktion als virtuell deklariert werden? Welche Rolle spielen virtuelle Funktionen?

王林
王林Original
2024-04-19 18:06:02653Durchsuche

Virtuelle Funktionen in C++ ermöglichen abgeleiteten Klassen, von Basisklassen geerbte Methoden neu zu definieren, um Polymorphismus zu erreichen. Die Syntax lautet: Deklarieren Sie eine virtuelle Funktion mit dem Schlüsselwort virtual in der Basisklasse und definieren Sie sie mit Override in der abgeleiteten Klasse neu. Durch Aufrufen einer virtuellen Funktion über einen Zeiger oder eine Referenz kann ein abgeleitetes Klassenobjekt eine virtuelle Basisklassenfunktion aufrufen. Zu den Hauptfunktionen virtueller Funktionen gehören: Realisierung von Polymorphismus, Unterstützung dynamischer Bindung und Bereitstellung von Abstraktion.

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

Virtuelle Funktionen in C++

Einführung

Eine virtuelle Funktion ist eine spezielle Art von Mitgliedsfunktion, die es einer abgeleiteten Klasse ermöglicht, von einer Basisklasse geerbte Methoden neu zu definieren. Dies ermöglicht Polymorphismus, d. h. abgeleitete Klassenobjekte können auf die gleiche Weise wie Basisklassenobjekte behandelt werden.

Syntax

Virtuelle Funktionen werden in der Basisklasse mit dem Schlüsselwort virtual deklariert: virtual 关键字:

class Base {
public:
  virtual void func() { /* ... */ }
};

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

class Derived : public Base {
public:
  void func() override { /* ... */ }
};

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

Base* base = new Derived;
base->func(); // 调用 Derived::func()

实战案例

考虑以下示例:

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;
}

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

In abgeleiteten Klassen können virtuelle Funktionen neu definiert werden:

rrreeeVirtuelle Funktionsaufrufe erfolgen über Zeiger oder Die Referenz ist vollständig, sodass das abgeleitete Klassenobjekt die virtuelle Funktion in der übergeordneten Klasse aufrufen kann: rrreee

Praktisches Beispiel

  • Betrachten Sie das folgende Beispiel: rrreeeIn diesem Beispiel ist die Basisklasse Shape definiert eine Abstraktionsfunktion area(), abgeleitete Klassen Circle und Square stellen ihre eigene Implementierung bereit. Die Hauptfunktion erstellt ein Array von Shape-Zeigern, die auf Objekte der abgeleiteten Klasse zeigen, und berechnet die Gesamtfläche durch virtuelle Funktionsaufrufe.
  • Funktion
  • Zu den Hauptfunktionen virtueller Funktionen gehören:
Implementieren von Polymorphismus: 🎜Ermöglicht abgeleiteten Klassenobjekten die gemeinsame Interaktion mit Basisklassenobjekten. 🎜🎜🎜Unterstützung dynamischer Bindung: 🎜Binden Sie Funktionsaufrufe zur Laufzeit und rufen Sie abgeleitete Klassenmethoden basierend auf dem tatsächlichen Objekttyp auf. 🎜🎜🎜Abstraktion bereitstellen: 🎜Basisklassen können abstrakte Methoden definieren, die durch abgeleitete Klassen konkret implementiert werden. 🎜🎜

Das obige ist der detaillierte Inhalt vonKann eine C++-Funktion als virtuell deklariert werden? Welche Rolle spielen virtuelle Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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