C++ 中繼承和多態性的實作機制:繼承:透過繼承說明符實現,衍生類別繼承並擴展基底類別行為。多態性:透過虛函數表實現,基底類別指標動態呼叫衍生類別方法。實作案例:透過繼承和多態性,可以建立形狀類別層次結構並編寫函數計算任何形狀的總面積。
C++ 中繼承和多型性的實作機制
繼承和多態性是C++ 中實作程式碼重用和動態綁定至關重要的特性。然而,理解其底層的實作機制對於寫出高效且健壯的程式碼非常重要。
實作機制
#1.繼承
繼承是一種建立一個新類別(衍生類別)的方式,該類別繼承並擴展了現有類別(基底類別)的行為。在 C++ 中,繼承透過 public
、protected
或 private
繼承說明符實作。
例如:
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
基底類別和Circle
、Square
和Triangle
衍生類別。
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()
函數,該函數可以計算任何形狀的總面積:
double calculateTotalArea(vector<Shape*>& shapes) { double totalArea = 0; for (Shape* shape : shapes) { totalArea += shape->area(); } return totalArea; }
以上是C++ 中繼承和多態性的實作機制是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!