Latest web development tutorials

C de l'héritage

La programmation orientée objet est le concept le plus important est héritée. L'héritage permet de définir une classe à une autre base de classe, ce qui permet de créer et de maintenir une application plus facile. Pour ce faire, a également atteint la réutilisation de la fonctionnalité de code et d'améliorer les résultats en temps d'exécution.

Lorsque vous créez une classe, vous n'avez pas besoin de ré-écrire les nouveaux membres de données et les fonctions membres, il suffit de spécifier la nouvelle classe hérite d'un membre existant de la classe peut être. La classe existante est appeléela classe de base, la nouvelle classe est appelée la classe dérivée.

L' héritageest un représentant de la relation.Par exemple, le mammifère est un animal, un chien est un mammifère, par conséquent, un chien est un animal, et ainsi de suite.

& Derived classe de base de classe

Une classe peut être dérivé de plus d'une classe, ce qui signifie qu'il peut hériter de données et des fonctions de plusieurs classes de base. Définit une classe dérivée, nous utilisons une liste de classe dérivée pour spécifier une classe de base. liste de dérivation de la classe à la classe une ou plusieurs base de nom sous la forme suivante:

class derived-class: access-specifier base-class

Dans lequel l'accès modificateur d' accès spécificateur estpublic, protégé ou un privé,la classe de base est défini avant le nom d'une classe. Si aucun modificateur d'accès accès spécificateur, la valeur par défaut est privé.

Supposons que vous avez uneformede classe debase,Rectangle ses classes dérivées, comme suit:

#include <iostream>
 
using namespace std;

// 基类
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Total area: 35

Contrôle d'accès et de l'héritage

classe dérivée peut accéder à la classe de base pour tous les membres non-privés. Donc, si vous voulez être un membre d'une des fonctions de membre de classe de base de l'accès de la classe dérivée doit être déclarée dans la classe de base est privée.

Nous pouvons résumer les différents droits d'accès en fonction du type d'accès, comme suit:

访问publicprotectedprivate
同一个类yesyesyes
派生类yesyesno
外部的类yesnono

Une classe dérivée hérite de toutes la méthode de classe de base, sauf dans les circonstances suivantes:

  • constructeur de la classe de base et destructor et constructeur de copie.
  • Les opérateurs surchargés de la classe de base.
  • Ami de la fonction de la classe de base.

Type d'héritage

Quand une classe est dérivée de la classe de base, la classe de base peut être héritée commepublic, protégé ou types privés.Grâce à l'explication ci-dessus est hérité type d'accès modificateur d'accès spécificateur pour spécifier.

Nous utilisons à peineprotégés ou l' héritage privéest généralement utilisé héritagepublic.Lorsque différents types d'héritage, suivez les règles suivantes:

  • classe les membresprotégés quand une classe est dérivée d'une classe de base publique,les membres dupublicde la classe de base est dérivée des membres dupublicd'une classe, les membresprotégésde la classe de base est la classe dérivée,lesmembresprivésd'une classe de base ne peuvent pas être directementdérivés:l'héritage public (public)l' accès, mais peut être consulté en appelantlesmembrespublicsetprotégésde la classe de base.
  • héritage protégé (protégé): Quand une classe dérivée de la protectionde la classe debase,les membrespublicsetprotégésde la classe de base deviendront membresprotégés dela classe dérivée.
  • l'héritage privé (privé): Quand une classe est dérivée d'une classe de base des membres privés,publics etprotégésde la classe de base seront membresprivésde la classe dérivée.

héritage multiple

L'héritage multiple qui est une sous-classe peut avoir plus d'une classe parente qui hérite des caractéristiques de plus d'une classe parent.

C ++ classe peut hériter de plus d'un membre de la classe la syntaxe suivante:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

En quoi l'héritage d' accès de modification estpublic, protégé ou un privé,utilisé pour décorer chaque classe de base, la classe de base entre chaque séparés par une virgule, comme indiqué ci - dessus. Maintenant, penchons-nous sur les exemples suivants:

#include <iostream>
 
using namespace std;

// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};

// 派生类
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   area = Rect.getArea();
   
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   // 输出总花费
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Total area: 35
Total paint cost: $2450