Maison > développement back-end > C++ > L'application des fonctions virtuelles C++ en STL : révéler le caractère polymorphe des conteneurs

L'application des fonctions virtuelles C++ en STL : révéler le caractère polymorphe des conteneurs

WBOY
Libérer: 2024-04-28 15:09:01
original
1111 Les gens l'ont consulté

Les conteneurs STL utilisent des fonctions virtuelles pour réaliser le polymorphisme, permettant aux pointeurs de classe de base d'appeler des méthodes de classe dérivées. Les applications spécifiques incluent des destructeurs et des fonctions membres opérationnelles, telles que Operator[], push_back() et Eraser(), pour réaliser une liaison dynamique et un stockage de différents types d'objets.

C++ 虚拟函数在 STL 中的应用:揭秘容器的多态本质

Application des fonctions virtuelles C++ en STL : Révéler la nature polymorphe des conteneurs

Avant-propos

STL (Standard Template Library) est une puissante bibliothèque de conteneurs en C++, nous fournissant une variété de structures de données et les algorithmes. En STL, les fonctions virtuelles sont largement utilisées pour réaliser un polymorphisme dynamique des conteneurs. Cet article approfondira l'application des fonctions virtuelles en STL et démontrera son rôle à travers des cas pratiques.

Introduction aux fonctions virtuelles

Les fonctions virtuelles sont une fonctionnalité de polymorphisme en C++ qui permet aux objets de classes dérivées d'appeler leurs méthodes implémentées respectives via des pointeurs ou des références de la classe de base. Cela signifie que les objets de classe dérivés peuvent se comporter comme leurs objets de classe de base et être traités comme des objets de classe de base.

Application des fonctions virtuelles en STL

Les conteneurs en STL, tels que vecteur, liste et carte, utilisent tous des fonctions virtuelles pour réaliser leur polymorphisme. Plus précisément, ils déclarent des fonctions virtuelles dans le destructeur et certaines fonctions membres opérationnelles, telles que Operator[], push_back(), Eraser(), etc.

Cas pratique : liaison dynamique et conteneur de classe dérivée

Pour démontrer le rôle des fonctions virtuelles dans STL, nous créons une classe de base nommée Base, et deux classes dérivées, Derived1 et Derived2.

class Base {
public:
  virtual ~Base() { };
  virtual void print() const { cout << "Base" << endl; };
};

class Derived1 : public Base {
public:
  virtual void print() const override { cout << "Derived1" << endl; };
};

class Derived2 : public Base {
public:
  virtual void print() const override { cout << "Derived2" << endl; };
};
Copier après la connexion

Ensuite, nous créons un vecteur et y ajoutons des objets Base, Derived1 et Derived2.

vector<Base*> vec;
vec.push_back(new Base());
vec.push_back(new Derived1());
vec.push_back(new Derived2());
Copier après la connexion

Maintenant, parcourons le vecteur et appelons la méthode print() de chaque objet. Grâce à l'utilisation de la liaison dynamique, le pointeur de classe de base peut appeler automatiquement la méthode de l'objet de classe dérivé pour imprimer le type de l'objet de manière polymorphe.

for (Base* obj : vec) {
  obj->print();
}
Copier après la connexion

Sortie :

Base
Derived1
Derived2
Copier après la connexion

Comme vous pouvez le voir sur la sortie, la méthode print() est appelée correctement et le type de la classe dérivée est imprimé. Cela montre comment les fonctions virtuelles implémentent le polymorphisme des conteneurs en STL.

Conclusion

Les fonctions virtuelles sont le mécanisme clé pour réaliser le polymorphisme des conteneurs en STL. Les conteneurs STL peuvent stocker et manipuler dynamiquement des objets de différents types en permettant aux pointeurs de classe de base d'appeler des méthodes de classe dérivées. Ce polymorphisme rend STL très puissant pour développer du code évolutif et maintenable.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal