Heim > Artikel > Backend-Entwicklung > Detaillierte Erklärung der C++-Funktionsvererbung: Was ist das Wesen des Polymorphismus?
Überblick über die Funktionsvererbung: Die Funktionsvererbung in C++ wird durch das Schlüsselwort override implementiert, wodurch Unterklassen übergeordnete Klassenfunktionen überschreiben können, was Polymorphismus ermöglicht, d. h. Objekte zeigen zur Laufzeit unterschiedliche Verhaltensweisen, selbst wenn sie zur gleichen übergeordneten Klasse gehören.
In der objektorientierten Programmierung ist die Vererbung ein wichtiger Mechanismus, der es Unterklassen ermöglicht, Datenelemente und Elementfunktionen von übergeordneten Klassen zu erben. Unter Funktionsvererbung versteht man die Vererbung von Mitgliedsfunktionen von der übergeordneten Klasse zur untergeordneten Klasse.
Polymorphismus ist ein Schlüsselkonzept in der objektorientierten Programmierung, das es Objekten ermöglicht, sich zur Laufzeit unterschiedlich zu verhalten, selbst wenn sie zur gleichen übergeordneten Klasse gehören. Die Funktionsvererbung ist eine Möglichkeit, Polymorphismus zu erreichen.
In C++ wird die Funktionsvererbung durch das Schlüsselwort override
implementiert. Wenn eine Unterklasse eine Funktion mit demselben Namen und derselben Signatur wie die übergeordnete Klasse definiert, wird die Funktion mit override
gekennzeichnet. Dadurch wird dem Compiler mitgeteilt, dass die Unterklasse die Funktionen der übergeordneten Klasse überschreibt. override
关键字实现。当子类定义了一个与父类同名且具有相同签名的函数时,该函数被标记为 override
。这会告诉编译器,子类正在覆盖父类的函数。
class Base { public: virtual void print() { std::cout << "Base class" << std::endl; } }; class Derived : public Base { public: virtual void print() override { std::cout << "Derived class" << std::endl; } };
在此示例中,Base
类定义了一个 print()
函数,而 Derived
类通过 override
关键字覆盖了该函数。因此,当调用 Derived
类对象的 print()
函数时,它将打印 "Derived class",而不是 "Base class"。
override
函数必须是虚函数。虚函数通过 virtual
关键字声明,它允许子类覆盖父类的函数。在上面的示例中,print()
函数是虚函数。
下面是一个演示函数继承和多态的代码案例:
#include <iostream> class Shape { public: virtual double getArea() = 0; }; class Rectangle : public Shape { public: double width, height; Rectangle(double w, double h) : width(w), height(h) {} double getArea() override { return width * height; } }; class Circle : public Shape { public: double radius; Circle(double r) : radius(r) {} double getArea() override { return 3.14 * radius * radius; } }; int main() { Shape* shapes[] = {new Rectangle(2, 3), new Circle(4)}; for (int i = 0; i < 2; i++) { std::cout << "Area of " << (i == 0 ? "Rectangle" : "Circle") << ": " << shapes[i]->getArea() << std::endl; } return 0; }
在该案例中,Shape
是形状类的基类,它定义了一个纯虚函数 getArea()
。Rectangle
和 Circle
类从 Shape
类继承,并覆盖了 getArea()
函数以计算各自的面积。
在 main()
函数中,使用多态,一个基类数组被用于存储 Rectangle
和 Circle
对象。由于 getArea()
rrreee
Base
eine Funktion print()
und die Klasse Derived
übergibt override
Das Schlüsselwort > überschreibt diese Funktion. Wenn daher die Funktion print()
eines Abgeleiteten
-Klassenobjekts aufgerufen wird, wird „Abgeleitete Klasse“ anstelle von „Basisklasse“ ausgegeben. Virtuelle Funktion🎜🎜override
-Funktion muss eine virtuelle Funktion sein. Virtuelle Funktionen werden mit dem Schlüsselwort virtual
deklariert, das es Unterklassen ermöglicht, übergeordnete Klassenfunktionen zu überschreiben. Im obigen Beispiel ist die Funktion print()
virtuell. 🎜🎜Praktischer Fall🎜🎜Das Folgende ist ein Codebeispiel, das Funktionsvererbung und Polymorphismus demonstriert: 🎜rrreee🎜In diesem Fall ist Shape
die Basisklasse der Shape-Klasse, die eine rein virtuelle Funktion definiertgetArea(). Die Klassen Rectangle
und Circle
erben von der Klasse Shape
und überschreiben die Funktion getArea()
, um ihre jeweiligen Flächen zu berechnen . 🎜🎜In der Funktion main()
wird unter Verwendung von Polymorphismus ein Basisklassenarray zum Speichern von Rectangle
- und Circle
-Objekten verwendet. Da die Funktion getArea()
überschrieben wird, wird basierend auf dem Objekttyp der richtige Bereich gedruckt. 🎜🎜Mit Funktionsvererbung und Polymorphismus können wir flexible und erweiterbare Programme mit unterschiedlichem Verhalten erstellen. 🎜Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der C++-Funktionsvererbung: Was ist das Wesen des Polymorphismus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!