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 中国語 Web サイトの他の関連記事を参照してください。