STL函數物件支援多態性,實作方式如下:使用虛擬函數和虛繼承定義抽象基底類別及其衍生類別。為每個衍生類別定義特定版本的函數。將具體類別作為參數傳遞給演算法。
STL 函數物件是否支援多型性?
標準範本庫 (STL) 中的函數物件支援執行時間多態性,允許在程式執行期間動態決定呼叫哪個函數。
實作方式:
透過使用虛擬函數和虛擬繼承,可以實現多型函數物件。
程式碼範例:
考慮以下範例,其中定義了一個抽象基底類別Shape
,具有一個純虛函數area( )
:
struct Shape { virtual double area() const = 0; };
衍生自Shape
的具體類,例如Circle
和Square
,定義了其特定版本的area()
函數:
struct Circle : public Shape { double radius; Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } }; struct Square : public Shape { double side_length; Square(double side_length) : side_length(side_length) {} double area() const override { return side_length * side_length; } };
可以使用函數物件將這些具體類別作為參數傳遞給演算法:
std::vector<Shape*> shapes{new Circle(2), new Square(3)}; double total_area = 0; for (const auto& shape : shapes) { total_area += shape->area(); } std::cout << "Total area: " << total_area << std::endl;
在這個範例中,即使shapes
儲存的是不同的Shape
衍生類別的指針,多型函數物件也會呼叫正確的area()
函數。
實戰案例:
多型函數物件在動態調度和鬆散耦合程式碼方面非常有用,例如:
以上是STL 函數物件是否支援多態性?如何實現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!