Maison > développement back-end > C++ > le corps du texte

Quel est le mécanisme d'implémentation de l'héritage et du polymorphisme en C++ ?

WBOY
Libérer: 2024-06-01 20:52:00
original
604 Les gens l'ont consulté

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.

C++ 中继承和多态性的实现机制是什么?

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. publicprotectedprivate 继承说明符实现。

例如:

class Animal {
public:
    virtual void speak() { cout << "Animal sound" << endl; }
};

class Dog : public Animal {
public:
    void speak() override { cout << "Woof!" << endl; }
};
Copier après la connexion

在这个示例中,Dog 类继承了 Animal 基类的 speak() 方法,并覆盖了该方法以提供特定的行为。

2. 多态性

多态性是指在运行时根据对象的实际类型动态调用方法的能力。它使基类指针能够访问派生类对象中的方法。

C++ 中的多态性是通过虚函数表实现的。在编译期间,为每个虚函数生成一个虚函数表条目。当基类指针调用虚函数时,它将查找对象的虚函数表,然后调用相应的方法。

例如:

Animal* animal = new Dog();
animal->speak(); // 输出: "Woof!"
Copier après la connexion

尽管 animal 指向的是 Animal 基类,但由于多态性,它将调用 Dog 对象中的 speak() 方法。

实战案例

考虑一个形状类层次结构,包括 Shape 基类和 CircleSquareTriangle 派生类。

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; }
};
Copier après la connexion

通过使用继承和多态性,我们可以编写一个 calculateTotalArea()

Par exemple : 🎜
double calculateTotalArea(vector<Shape*>& shapes) {
    double totalArea = 0;
    for (Shape* shape : shapes) {
        totalArea += shape->area();
    }
    return totalArea;
}
Copier après la connexion
🎜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 : 🎜rrreee

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!