Maison > développement back-end > C++ > Comment accéder aux membres publics d'une classe de base basée sur un modèle en C ?

Comment accéder aux membres publics d'une classe de base basée sur un modèle en C ?

Barbara Streisand
Libérer: 2024-11-01 15:12:31
original
185 Les gens l'ont consulté

How Can You Access Public Members of a Templated Base Class in C  ?

Invisibilité des membres publics dans l'héritage de classe modélisé

Considérez le code C suivant :

<code class="cpp">class CBase {
public:
    char Arr[32];
    int Fn1();
    int Fn2();
};

class CDerived : public CBase {
public:
    int FnSum();
};</code>
Copier après la connexion

Dans ce code, CDerived hérite des membres publics de CBase. Cependant, si ce code est modélisé, ce qui rend Arr et les fonctions modélisés, les membres publics de CBase deviennent invisibles pour CDerived.

Solutions

Pour résoudre ce problème, plusieurs des solutions existent :

  • Solution n°1 : Préfixez toutes les références aux membres CBase avec CBase::, où BYTES est le paramètre du modèle.
  • Solution n°2 : Préfixez toutes les références aux membres CBase avec this->.
  • Solution n°3 : Utilisez l'instruction using dans CDerived pour déclarer tous les membres CBase nécessaires .

Problème avec les solutions

Les solutions n°1 et n°2 nécessitent des ajouts verbeux au code, ce qui entraîne un gonflement des sources et des répétitions. La solution n°4, désactivant la stricte conformité, n'est pas portable et s'éloigne du standard C.

Solution améliorée

Pour simplifier le code, on peut utiliser des macros pour automatiser l'ajout de l'instruction using dans la solution n°3 :

<code class="cpp">#define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5)

// In CDerived<BYTES>, in a `public:` section
USING_CBASE(BYTES);</code>
Copier après la connexion

Cette macro générera automatiquement les instructions using nécessaires pour tous les membres de CBase qui sont utilisés dans CDerived.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal