Maison  >  Article  >  développement back-end  >  Explication détaillée de l'héritage public polymorphe C++

Explication détaillée de l'héritage public polymorphe C++

hzc
hzcavant
2020-07-01 15:33:081927parcourir

Étude recommandée : "Tutoriel c++"

- Le comportement de la méthode doit dépendre de l'appel l’objet méthode. Ce comportement plus complexe est appelé polymorphisme - ayant plusieurs formes, c'est-à-dire que la même méthode se comporte différemment selon le contexte.

Virtual implémente l'objet pour appeler la méthode ou la séquence de méthodes correcte.

Deux mécanismes pour réaliser le polymorphisme :

  1. Redéfinir la méthode de la classe de base dans la classe dérivée (la classe de base ne être modifié) méthode de classe).
  2. Utilisez des méthodes virtuelles.

Si vous utilisez le mot-clé virtual lors de la déclaration d'une fonction, ces méthodes sont appelées méthodes virtuelles.

  • Une fois qu'une méthode est déclarée virtuelle dans la classe de base, elle deviendra automatiquement une méthode virtuelle dans la classe dérivée. Cependant, c'est également une bonne idée d'utiliser le mot-clé virtual dans la déclaration de la classe dérivée pour indiquer quelles fonctions sont virtuelles.
<span style="color: #0000ff;">class</span><span style="color: #000000;"> Brass
{<br/>private:
    ...<br/>public:<br/>  ...<br/>  virtual void ViewAcct() const;<br/>  virtual ~Brass(){}
}</span>
 BrassPlus :

La classe de base déclare une fonction virtuelle pour garantir que lorsque l'objet dérivé est libéré, le destructeur est appelé dans le bon ordre (voir le rôle des fonctions virtuelles plus tard) .

Brass dom("Dominic Banker", 11224, 4183.45);
BrassPlus dot("Dorothy Banker", 12118, 2592.00);
dom.ViewAcct();    // use Brass::ViewAcct()dot.ViewAcct();    // use BrassPlus::ViewAcct()

Les deux prototypes ViewAcct() indiquent qu'il y aura 2 définitions de méthodes indépendantes. La version de la classe de base porte le nom qualifié Brass::ViewAcct() et la version de la classe dérivée porte le nom qualifié BrassPlus::ViewAcct().

Appeler une méthode par référence ou pointeur au lieu d'un objet :

Si le mot clé virtual n'est pas utilisé, le programme choisira en fonction du type de référence ou type de pointeur Méthode :

// behavior with non-virtual ViewAcct()// method chosen according to reference typeBrass &b1_ref = dom;
Bross &b2_ref = dot;
b1_ref.ViewAcct();    // use Brass::ViewAcct()b2_ref.ViewAcct();    // use Brass::ViewAcct()

Si vous souhaitez redéfinir une méthode de classe de base dans une classe dérivée, vous devez généralement déclarer la méthode de classe de base comme virtuelle. De cette façon, le programme choisira la version de la méthode en fonction du type d'objet plutôt que du type de référence ou de pointeur. Il est également courant de déclarer un destructeur virtuel pour une classe de base. L'utilisation d'un destructeur virtuel garantit que la séquence correcte de destructeurs est appelée (c'est-à-dire de l'objet de classe dérivé à l'objet de classe de base appelant une fois leurs destructeurs).

Appel des méthodes de classe de base : Dans les méthodes de classe dérivée, la technique standard consiste à utiliser l'opérateur de résolution de portée pour appeler les méthodes de classe de base :

<span class="cnblogs_code">Brass::ViewAcct(); <span style="color: #008000;">//<code><span class="cnblogs_code">Brass::ViewAcct(); <span style="color: #008000;">//</span><span style="color: #008000;"> display base portion</span></span> afficher la partie de base

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer