Maison > Article > développement back-end > Les objets fonction STL prennent-ils en charge le polymorphisme ? Comment y parvenir ?
Les objets fonction STL prennent en charge le polymorphisme, qui est implémenté comme suit : utilisez des fonctions virtuelles et l'héritage virtuel pour définir des classes de base abstraites et leurs classes dérivées. Définissez des versions spécifiques des fonctions pour chaque classe dérivée. Passez des classes concrètes comme paramètres à l’algorithme.
Les objets fonction STL prennent-ils en charge le polymorphisme ?
Les objets fonction de la bibliothèque de modèles standard (STL) prennent en charge le polymorphisme d'exécution, permettant la détermination dynamique de la fonction à appeler pendant l'exécution du programme.
Méthode d'implémentation :
En utilisant des fonctions virtuelles et l'héritage virtuel, des objets de fonction polymorphes peuvent être implémentés.
Exemple de code :
Considérons l'exemple suivant, où une classe de base abstraite Shape
est définie, avec une fonction virtuelle pure area()
: 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
, telles que Circle
et Square
, définissent leurs versions spécifiques de area()
function : rrreeeVous pouvez utiliser des objets fonction pour transmettre ces classes concrètes comme arguments aux algorithmes : rrreee
Dans cet exemple, même sishapes
stocke un pointeur vers une Shape
différente > classe dérivée, l'objet fonction polymorphe appellera également la fonction area()
correcte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!