STL-Funktionsobjekte unterstützen Polymorphismus, der wie folgt implementiert wird: Verwenden Sie virtuelle Funktionen und virtuelle Vererbung, um abstrakte Basisklassen und ihre abgeleiteten Klassen zu definieren. Definieren Sie spezifische Funktionsversionen für jede abgeleitete Klasse. Übergeben Sie konkrete Klassen als Parameter an den Algorithmus.
Unterstützen STL-Funktionsobjekte Polymorphismus?
Funktionsobjekte in der Standard Template Library (STL) unterstützen Laufzeitpolymorphismus und ermöglichen eine dynamische Bestimmung, welche Funktion während der Programmausführung aufgerufen werden soll.
Implementierungsmethode:
Durch die Verwendung virtueller Funktionen und virtueller Vererbung können polymorphe Funktionsobjekte implementiert werden.
Codebeispiel:
Betrachten Sie das folgende Beispiel, in dem eine abstrakte Basisklasse Shape
mit einer rein virtuellen Funktion area()
definiert wird: 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()
rrreee
Shape
, wie zum Beispiel Circle
und Square
, definieren ihre spezifischen Versionen der Funktion area()
: rrreeeSie können Funktionsobjekte verwenden, um diese konkreten Klassen als Argumente an Algorithmen zu übergeben: rrreee
In diesem Beispiel speichertshape
zwar einen Zeiger auf eine andere abgeleitete Shape
class ruft das polymorphe Funktionsobjekt auch die richtige Funktion area()
auf.
Das obige ist der detaillierte Inhalt vonUnterstützen STL-Funktionsobjekte Polymorphismus? Wie erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!