Die beide Syntaxen Sie in Ihrem Code verwenden (this->...
und qualifizierte Namen) sind nur speziell notwendig, wenn es Unklarheiten oder eine andere Name Lookup-Ausgabe ist, wie Namen verstecken, Vorlage Basisklasse usw.
Wenn nicht gibt es Mehrdeutigkeit oder andere Probleme brauchen Sie keine dieser Syntaxen. Alles, was Sie brauchen, ist ein einfacher unqualifizierter Name, wie in Ihrem Beispiel Write
. Nur Write
, nicht this->Write
und nicht Foundation::Write
. Gleiches gilt für mWords
.
I.e. In Ihrem speziellen Beispiel funktioniert eine einfache Write(mWords)
gut.
Um die oben zu zeigen, wenn Ihre DoSomething
Methode mWords
Parameter hat, wie in
DoSomething(int mWords) {
...
dann diesen lokalen mWords
Parameterklassen Mitglied mWords
geerbt verstecken würden und Sie würden entweder
verwenden müssen
DoSomething(int mWords) {
Write(this->mWords);
}
oder
DoSomething(int mWords) {
Write(Foundation::mWords);
}
, um Ihre Absicht richtig auszudrücken, d. H. Um das Verstecken zu durchbrechen.
Wenn Ihre Child
Klasse hat auch sein eigenes mWords
Mitglied, wie in
class Child : public Base, public Foundation
{
int mWords
...
dann dieser Namen die geerbte mWords
verstecken würde. Der this->mWords
Ansatz würde in diesem Fall nicht helfen, die richtigen Namen sichtbar machen, und Sie würden die qualifizierten Namen verwenden, um das Problem zu lösen
DoSomething(int mWords) {
Write(Foundation::mWords);
}
Wenn Ihre beiden Basisklassen hatten ein mWords
Mitglied in
class Base {
public:
std::string mWords;
...
};
class Foundation {
public:
int mWords;
...
, wie dann in Child::DoSomething
der mWords
Name zweideutig wäre, und Sie würden zu tun haben
DoSomething(int mWords) {
Write(Foundation::mWords);
}
um die Mehrdeutigkeit aufzulösen.
Aber noch einmal, in Ihrem speziellen Beispiel, wo es keine Zweideutigkeit und kein Name alles versteckt ist völlig unnötig.
macht Sinn. Vielen Dank! –