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

Comment exploiter les constructeurs et l'opérateur d'affectation de Base Class en C ?

DDD
Libérer: 2024-11-01 05:46:02
original
671 Les gens l'ont consulté

How do I leverage Base Class's constructors and assignment operator in C  ?

Comment exploiter les constructeurs et l'opérateur d'affectation de la classe de base en C

En C, les classes héritantes peuvent hériter du comportement de la classe de base, y compris constructeurs et opérateurs d’affectation. Considérons une classe de base B avec un ensemble de constructeurs et un opérateur d'affectation :

<code class="cpp">class B {
 public:
  B();
  B(const string& s);
  B(const B& b) { *this = b; }
  B& operator=(const B& b);
};</code>
Copier après la connexion

Maintenant, vous souhaitez créer une classe dérivée D qui remplace la fonction foo() tout en héritant du même ensemble de constructeurs, y compris le constructeur de copie et l'opérateur d'affectation. Cependant, pour éviter la duplication, vous souhaitez utiliser les constructeurs et opérateurs existants dans B.

Invocation explicite :

Vous pouvez appeler explicitement les constructeurs et l'opérateur d'affectation de la classe de base. dans le constructeur et l'opérateur d'affectation de la classe dérivée, respectivement. Cela garantit que les variables membres de la classe de base sont correctement initialisées.

<code class="cpp">class D : public B {
 public:
  D(const D& d) : B(d), additional_(d.additional_) {}
  D& operator=(const D& d) {
    B::operator=(d);
    additional_ = d.additional_;
    return *this;
  }
 private:
  int additional_;
};</code>
Copier après la connexion

Invocation implicite :

Fait intéressant, même si vous ne définissez pas explicitement le constructeur de copie et opérateur d'affectation dans la classe dérivée, le compilateur générera des versions par défaut. Ces versions par défaut appellent implicitement le constructeur de copie et l'opérateur d'affectation de la classe de base, respectivement.

Par exemple, avec la classe de base suivante :

<code class="cpp">class ImplicitBase {
  int value_;
};</code>
Copier après la connexion

L'opérateur d'affectation de la classe dérivée suivante appelle implicitement la classe de base opérateur d'affectation de la classe :

<code class="cpp">class Derived : public ImplicitBase {
  const char* name_;
 public:
  Derived& operator=(const Derived& d) {
    ImplicitBase::operator=(d); // Implicit call to base class's assignment operator
    name_ = strdup(d.name_);
    return *this;
  }
};</code>
Copier après la connexion

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!

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!