Maison  >  Article  >  développement back-end  >  Les objets fonction STL prennent-ils en charge le polymorphisme ? Comment y parvenir ?

Les objets fonction STL prennent-ils en charge le polymorphisme ? Comment y parvenir ?

王林
王林original
2024-04-25 10:39:01741parcourir

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.

STL 函数对象是否支持多态性?如何实现?

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 的具体类,例如 CircleSquare,定义了其特定版本的 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

est dérivées des classes concrètes de 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 si shapes stocke un pointeur vers une Shapedifférente > classe dérivée, l'objet fonction polymorphe appellera également la fonction area() correcte.

    Cas pratique :
  • Les objets fonctions polymorphes sont très utiles dans la planification dynamique et le code faiblement couplé, tels que :
🎜Dans la bibliothèque graphique, les classes de formes peuvent représenter différents types de graphiques. Les objets fonctionnels polymorphes permettent de dessiner et de calculer des zones sans modifier le code graphique. 🎜🎜Dans les applications de base de données, les classes de connexion peuvent résumer différents types de connexions à la base de données. Les objets fonction polymorphes permettent d'effectuer des requêtes et des mises à jour de manière transparente. 🎜🎜

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn