Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Implementierungsmechanismus von Vererbung und Polymorphismus in C++?

Was ist der Implementierungsmechanismus von Vererbung und Polymorphismus in C++?

WBOY
WBOYOriginal
2024-06-01 20:52:00605Durchsuche

Der Implementierungsmechanismus von Vererbung und Polymorphismus in C++: Vererbung: Durch Vererbungsspezifizierer implementiert, erben und erweitern abgeleitete Klassen das Verhalten der Basisklasse. Polymorphismus: Durch eine virtuelle Funktionstabelle realisiert, ruft der Basisklassenzeiger dynamisch die abgeleitete Klassenmethode auf. Implementierungsbeispiel: Durch Vererbung und Polymorphismus können Sie eine Hierarchie von Formklassen erstellen und Funktionen schreiben, um die Gesamtfläche jeder Form zu berechnen.

C++ 中继承和多态性的实现机制是什么?

Der Implementierungsmechanismus von Vererbung und Polymorphismus in C++

Vererbung und Polymorphismus sind entscheidende Funktionen in C++, um die Wiederverwendung von Code und dynamische Bindung zu erreichen. Um effizienten und robusten Code zu schreiben, ist es jedoch wichtig, die zugrunde liegende Implementierung zu verstehen.

Implementierungsmechanismus

1. Vererbung

Vererbung ist eine Möglichkeit, eine neue Klasse (abgeleitete Klasse) zu erstellen, die das Verhalten einer vorhandenen Klasse (Basisklasse) erbt und erweitert. In C++ wird die Vererbung durch die Vererbungsspezifizierer public, protected oder private implementiert. publicprotectedprivate 继承说明符实现。

例如:

class Animal {
public:
    virtual void speak() { cout << "Animal sound" << endl; }
};

class Dog : public Animal {
public:
    void speak() override { cout << "Woof!" << endl; }
};

在这个示例中,Dog 类继承了 Animal 基类的 speak() 方法,并覆盖了该方法以提供特定的行为。

2. 多态性

多态性是指在运行时根据对象的实际类型动态调用方法的能力。它使基类指针能够访问派生类对象中的方法。

C++ 中的多态性是通过虚函数表实现的。在编译期间,为每个虚函数生成一个虚函数表条目。当基类指针调用虚函数时,它将查找对象的虚函数表,然后调用相应的方法。

例如:

Animal* animal = new Dog();
animal->speak(); // 输出: "Woof!"

尽管 animal 指向的是 Animal 基类,但由于多态性,它将调用 Dog 对象中的 speak() 方法。

实战案例

考虑一个形状类层次结构,包括 Shape 基类和 CircleSquareTriangle 派生类。

class Shape {
public:
    virtual double area() = 0;
};

class Circle : public Shape {
public:
    double area() override { return 3.14 * radius * radius; }
};

class Square : public Shape {
public:
    double area() override { return side * side; }
};

class Triangle: public Shape {
public:
    double area() override { return 0.5 * base * height; }
};

通过使用继承和多态性,我们可以编写一个 calculateTotalArea()

Zum Beispiel: 🎜
double calculateTotalArea(vector<Shape*>& shapes) {
    double totalArea = 0;
    for (Shape* shape : shapes) {
        totalArea += shape->area();
    }
    return totalArea;
}
🎜In diesem Beispiel erbt die Klasse Dog die Methode speak() der Basisklasse Animal und überschreibt diese Methode zur Bereitstellung eines bestimmten Verhaltens. 🎜🎜🎜2. Polymorphismus 🎜🎜🎜Polymorphismus bezieht sich auf die Fähigkeit, Methoden zur Laufzeit basierend auf dem tatsächlichen Typ des Objekts dynamisch aufzurufen. Es ermöglicht Basisklassenzeigern den Zugriff auf Methoden in abgeleiteten Klassenobjekten. 🎜🎜Polymorphismus in C++ wird durch virtuelle Funktionstabellen erreicht. Bei der Kompilierung wird für jede virtuelle Funktion ein vtable-Eintrag generiert. Wenn ein Basisklassenzeiger eine virtuelle Funktion aufruft, sucht er in der Vtable des Objekts und ruft dann die entsprechende Methode auf. 🎜🎜Zum Beispiel: 🎜rrreee🎜Obwohl animal auf die Basisklasse Animal verweist, wird aufgrund des Polymorphismus das Dog-Objekt speak()-Methode. 🎜🎜🎜Praktischer Fall🎜🎜🎜Betrachten Sie eine Formklassenhierarchie, einschließlich der Basisklasse Shape und Circle, Square und Triangle Abgeleitete Klasse. 🎜rrreee🎜Durch die Verwendung von Vererbung und Polymorphismus können wir eine <code>calculateTotalArea()-Funktion schreiben, die die Gesamtfläche jeder Form berechnen kann: 🎜rrreee

Das obige ist der detaillierte Inhalt vonWas ist der Implementierungsmechanismus von Vererbung und Polymorphismus in C++?. 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