Dans quel sens dois-je accéder à cette méthode parente et la variable parent?
class Base { public: std::string mWords; Base() { mWords = "blahblahblah" } }; class Foundation { public: Write( std::string text ) { std::cout << text; } }; class Child : public Base, public Foundation { DoSomething() { this->Write( this->mWords ); // or Foundation::Write( Base::mWords ); } };
3 Réponses :
Je pense que c'est l'approche la plus courante: sauf si vous rencontrez une ambiguïté. P> S'il y a une ambiguïté ou une observation parce que vous voulez quelque chose dans un (particulier) classe de base mais quelque chose dans une autre classe de base (ou cette classe) la masque, utilisez ensuite la base Si une variable locale est en train d'ombrir un de vos membres, Ensuite, utilisez Je suppose qu'un moyen de regarder qu'il serait d'utiliser le premier de ceux-ci qui fonctionne et fait ce que vous voulez: p> < ol>
base :: nom code> syntaxe. p>
ceci -> code>, bien que en général, vous devriez essayer d'éviter cette situation. (c.-à-d. Essayez d'éviter de nommer les sections locales de telle sorte que les membres de l'ombre) p>
nom code> li>
this-> nom code> li>
base :: nom code> li>
ol> p>
Oui, je pourrais avoir à traiter avec ambiguïté ... Je vais clarifier dans mon message d'origine.
Comme il n'y a pas de conflit de nommage, utilisez simplement écrire (MODS) code>. Utilisez les 2 autres si vous avez des variables locales qui conflit ou lorsque les noms sont cachés. P>
S'il y a un conflit, quelle méthode recommandez-vous que j'utilise?
Et que voulez-vous dire par "quand les noms sont cachés"?
Si c'est un conflit entre variables locales et variables de membre (par exemple, votre classe a une variable de membre i code>, et votre méthode utilise également une variable locale
i code>), utilisez
ceci code>. Si
A code> déclare une fonction
f code>, et
b code> hérite
a code> et déclare
f code> aussi et vous souhaitez appeler
A code> 'S
f code> à partir de
B code>, puis utilisez
a :: f code>.
Les deux syntaxes que vous utilisez dans votre code ( Lorsqu'il n'y a pas d'ambiguïté ou d'autres problèmes, vous n'avez pas besoin de ces syntaxes. Tout ce dont vous avez besoin est un simple nom non qualifié, comme I.e. Dans votre exemple spécifique, une ligne Pour illustrer ce qui précède, si votre ceci -> ... code> et des noms qualifiés) ne sont nécessaires que spécifiquement lorsqu'il y a une ambiguïté ou une autre question de recherche de noms, comme le cas de la cachette de nom, la base de gabarit Classe, etc.
écrire code> dans votre exemple. Juste
écrire code>, pas
this-> écrire code> et non
fondation :: écrire code>. La même chose s'applique à
Mwores code>. P>
écriture (mwores) code> fonctionnera simplement bien. p>
DOSMATHIGHT code> était MODS CODE> Paramètre, comme dans P>
DoSomething(int mWords) {
Write(Foundation::mWords);
}