Maison > Article > développement back-end > Quel est le mécanisme d’implémentation de l’héritage et du polymorphisme en C++ ?
Le mécanisme d'implémentation de l'héritage et du polymorphisme en C++ : Héritage : implémentées via des spécificateurs d'héritage, les classes dérivées héritent et étendent le comportement de la classe de base. Polymorphisme : réalisé via une table de fonctions virtuelles, le pointeur de classe de base appelle dynamiquement la méthode de classe dérivée. Exemple d'implémentation : grâce à l'héritage et au polymorphisme, vous pouvez créer une hiérarchie de classes de formes et écrire des fonctions pour calculer la surface totale de n'importe quelle forme.
Le mécanisme d'implémentation de l'héritage et du polymorphisme en C++
L'héritage et le polymorphisme sont des fonctionnalités cruciales en C++ pour réaliser la réutilisation du code et la liaison dynamique. Cependant, comprendre son implémentation sous-jacente est important pour écrire un code efficace et robuste.
Mécanisme d'implémentation
1. L'héritage
L'héritage est un moyen de créer une nouvelle classe (classe dérivée) qui hérite et étend le comportement d'une classe existante (classe de base). En C++, l'héritage est implémenté via les spécificateurs d'héritage public
, protected
ou private
. public
、protected
或 private
继承说明符实现。
例如:
class Animal { public: virtual void speak() { cout << "Animal sound" << endl; } }; class Dog : public Animal { public: void speak() override { cout << "Woof!" << endl; } };
在这个示例中,Dog
类继承了 Animal
基类的 speak()
方法,并覆盖了该方法以提供特定的行为。
2. 多态性
多态性是指在运行时根据对象的实际类型动态调用方法的能力。它使基类指针能够访问派生类对象中的方法。
C++ 中的多态性是通过虚函数表实现的。在编译期间,为每个虚函数生成一个虚函数表条目。当基类指针调用虚函数时,它将查找对象的虚函数表,然后调用相应的方法。
例如:
Animal* animal = new Dog(); animal->speak(); // 输出: "Woof!"
尽管 animal
指向的是 Animal
基类,但由于多态性,它将调用 Dog
对象中的 speak()
方法。
实战案例
考虑一个形状类层次结构,包括 Shape
基类和 Circle
、Square
和 Triangle
派生类。
class Shape { public: virtual double area() = 0; }; class Circle : public Shape { public: double area() override { return 3.14 * radius * radius; } }; class Square : public Shape { public: double area() override { return side * side; } }; class Triangle: public Shape { public: double area() override { return 0.5 * base * height; } };
通过使用继承和多态性,我们可以编写一个 calculateTotalArea()
double calculateTotalArea(vector<Shape*>& shapes) { double totalArea = 0; for (Shape* shape : shapes) { totalArea += shape->area(); } return totalArea; }🎜Dans cet exemple, la classe
Dog
hérite de la méthode speak()
de la classe de base Animal
et remplace la Méthode pour fournir un comportement spécifique. 🎜🎜🎜2. Polymorphisme 🎜🎜🎜Le polymorphisme fait référence à la capacité d'appeler dynamiquement des méthodes au moment de l'exécution en fonction du type réel de l'objet. Il permet aux pointeurs de classe de base d'accéder aux méthodes des objets de classe dérivés. 🎜🎜Le polymorphisme en C++ est obtenu grâce à des tables de fonctions virtuelles. Lors de la compilation, une entrée vtable est générée pour chaque fonction virtuelle. Lorsqu'un pointeur de classe de base appelle une fonction virtuelle, il recherche la table virtuelle de l'objet, puis appelle la méthode appropriée. 🎜🎜Par exemple : 🎜rrreee🎜Bien que animal
pointe vers la classe de base Animal
, en raison du polymorphisme, il appellera l'objet Dog
speak()
méthode. 🎜🎜🎜Cas pratique🎜🎜🎜Considérons une hiérarchie de classes de formes, comprenant la classe de base Shape
et Circle
, Square
et Triangle Classe dérivée. 🎜rrreee🎜En utilisant l'héritage et le polymorphisme, nous pouvons écrire une fonction <code>calculateTotalArea()
qui peut calculer l'aire totale de n'importe quelle forme : 🎜rrreeeCe 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!