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.
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; }; };
Ensuite, nous créons un vecteur
vector<Base*> vec; vec.push_back(new Base()); vec.push_back(new Derived1()); vec.push_back(new Derived2());
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(); }
Sortie :
Base Derived1 Derived2
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!