Maison  >  Article  >  développement back-end  >  Comment l’héritage est-il utilisé pour créer des hiérarchies de classes en C++ ?

Comment l’héritage est-il utilisé pour créer des hiérarchies de classes en C++ ?

WBOY
WBOYoriginal
2024-06-04 15:11:09886parcourir

L'héritage C++ est utilisé pour créer des hiérarchies de classes, où de nouvelles classes (classes dérivées) héritent des fonctionnalités d'une classe de base et étendent ses fonctionnalités. Les classes dérivées utilisent des spécificateurs d'accès pour déclarer les relations d'héritage et contrôler l'accès aux membres de la classe de base. public accorde l'accès aux classes dérivées et au code externe, protected accorde l'accès aux classes dérivées et à leurs classes dérivées, et privé accorde l'accès aux classes dérivées uniquement. En créant une classe dérivée et en remplaçant la fonction virtuelle pure de la classe de base, la classe dérivée peut implémenter des fonctions personnalisées, telles que l'implémentation de Rectangle et Cercle dans l'exemple pour calculer l'aire d'une forme spécifique.

C++ 中继承如何用于构建类层次结构?

Héritage en C++ : Construire une hiérarchie de classes

Préface

L'héritage est un concept de base en programmation orientée objet qui permet la création de nouvelles classes à partir de classes existantes. En C++, l'héritage peut être utilisé pour créer une hiérarchie de classes dans laquelle chaque classe hérite de sa classe de base et étend éventuellement ses fonctionnalités.

Syntaxe

Pour hériter d'une classe de base, la nouvelle classe (classe dérivée) doit être déclarée en utilisant le public, protected ou private code> relation d'héritage du spécificateur d'accès. La syntaxe est la suivante : <code>publicprotectedprivate 访问说明符声明继承关系。语法如下:

class 派生类 : 访问说明符 基类 {
    // 派生类成员
};
  • 访问说明符控制派生类对基类成员的访问权限:

    • public:允许派生类和外部代码访问基类成员。
    • protected:允许派生类及其派生类访问基类成员。
    • private:只允许派生类访问基类成员。

实战案例

考虑一个描述几何形状的类层次结构:

class Shape {
public:
    virtual double getArea() const = 0; // 纯虚函数
};

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : _width(width), _height(height) {}
    double getArea() const override { return _width * _height; }
private:
    double _width, _height;
};

class Circle : public Shape {
public:
    Circle(double radius) : _radius(radius) {}
    double getArea() const override { return 3.14159 * _radius * _radius; }
private:
    double _radius;
};

示例

在此示例中,Shape 是形状类的基类,它包含一个纯虚函数 getArea(),这意味着必须在所有派生类中实现它。

  • Rectangle 是一个从 Shape 继承的矩形类,它覆盖了 getArea() 函数以计算矩形的面积。
  • Circle 是另一个从 Shape 继承的圆类,它也覆盖了 getArea() 函数以计算圆的面积。

要使用这个类层次结构,我们可以创建 RectangleCircle 对象并调用 getArea()

int main() {
    Rectangle rectangle(2.0, 3.0);
    cout << "Rectangle area: " << rectangle.getArea() << endl;
    Circle circle(5.0);
    cout << "Circle area: " << circle.getArea() << endl;
    return 0;
}

  • Access specifier contrôle les droits d'accès des classes dérivées aux membres de la classe de base :

    • public : classes dérivées autorisées et membres de la classe de base d'accès au code externe.
    • protected : permet aux classes dérivées et à leurs classes dérivées d'accéder aux membres de la classe de base.
    • privé : seules les classes dérivées sont autorisées à accéder aux membres de la classe de base.
Exemple pratique🎜🎜Considérons une hiérarchie de classes qui décrit une forme géométrique : 🎜
Rectangle area: 6
Circle area: 78.5398163397
🎜Exemple🎜🎜Dans cet exemple, Shape est la classe de base des classes de formes, elle contient une fonction virtuelle pure getArea(), ce qui signifie qu'elle doit être implémentée dans toutes les classes dérivées. 🎜
  • Rectangle est une classe rectangle héritée de Shape, qui remplace la fonction getArea() pour calculer l'aire de ​un rectangle.
  • Circle est une autre classe de cercle héritée de Shape, qui remplace également la fonction getArea() pour calculer la surface des cercles.
🎜Pour utiliser cette hiérarchie de classes, nous pouvons créer des objets Rectangle et Circle et appeler la fonction getArea() :🎜rrreee🎜Sortie :🎜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!

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