


Pourquoi les membres de la classe publique sont-ils invisibles lors de l'héritage de classes C basées sur un modèle ?
Nov 04, 2024 am 09:25 AMHéritage de la visibilité des membres de classe protégés et publics dans les classes C modélisées
Le problème de la visibilité des membres publics dans l'héritage devient apparent lorsqu'un modèle de classe hérite membres d’un autre modèle de classe, comme illustré dans le code fourni. Sans redéclarer ou redéfinir explicitement les membres publics, CDerived hérite de tous les membres publics de CBase.
Problème et solutions
La modélisation de ce code révèle cependant que les membres publics de CBase devenir invisible pour CDerived sur les compilateurs adhérant au dernier standard C. Ce problème de visibilité peut être résolu à l'aide de plusieurs solutions :
- Préfixer les références aux membres CBase avec CBase<BYTES>::
- Préfixer les références aux membres CBase avec this->
- Utilisation des instructions using pour des membres CBase spécifiques dans CDerived
- Désactivation de la stricte conformité à la norme C en activant le mode "permissif"
Inconvénients des solutions existantes
Bien qu'efficaces, ces solutions ont leurs inconvénients :
- La solution n°4 s'éloigne du standard C et n'est pas portable.
- Solutions n°1 et n°2 nécessitent des ajouts de code verbeux, entraînant une surcharge du code source.
- La solution n°3 nécessite plusieurs instructions using, en particulier pour les classes de base étendues.
Une solution moins verbeuse
L'introduction de macros simplifie la solution n°3, réduisant ainsi la saisie répétitive :
<code class="cpp">#include <boost/preprocessor.hpp> #define USING_ONE(r, base, member) using base::member; #define USING_ALL(base, ...) BOOST_PP_SEQ_FOR_EACH(USING_ONE, base, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) // Near CBase<BYTES> #define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5) // In CDerived<BYTES> USING_CBASE(BYTES);</code>
Ce code simplifie considérablement les instructions using, améliorant la lisibilité du code et réduisant les modifications répétitives.
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

Gulc: Cibliothèque C construite à partir de zéro

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Utilisation distincte et partage de phrases

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Comment fonctionne la bibliothèque de modèle standard C (STL)?

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?
