Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung der C++-Funktionsvererbung: Was ist das Wesen des Polymorphismus?

Detaillierte Erklärung der C++-Funktionsvererbung: Was ist das Wesen des Polymorphismus?

WBOY
WBOYOriginal
2024-05-04 21:30:021088Durchsuche

Ü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.

C++ 函数继承详解:多态的本质是什么?

Detaillierte Erklärung der C++-Funktionsvererbung: Das Wesen des Polymorphismus

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.

Einführung in den Polymorphismus

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.

Funktionsvererbung

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()RectangleCircle 类从 Shape 类继承,并覆盖了 getArea() 函数以计算各自的面积。

main() 函数中,使用多态,一个基类数组被用于存储 RectangleCircle 对象。由于 getArea()rrreee

In diesem Beispiel definiert die Klasse Base eine Funktion print() und die Klasse Derived übergibt overrideDas 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!

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