Consente inoltre di fare riferimento a variabili di un'altra classe (classe base nella maggior parte dei casi) con lo stesso nome. Per me è ovvio da questo esempio, spero che ti possa aiutare.
#include <iostream>
using std::cout;
using std::endl;
class Base {
public:
int bar;
Base() : bar(1){}
};
class Derived : public Base {
public:
int bar;
Derived() : Base(), bar(2) {}
void Test() {
cout << "#1: " << bar << endl; // 2
cout << "#2: " << this->bar << endl; // 2
cout << "#3: " << Base::bar << endl; // 1
cout << "#4: " << this->Base::bar << endl; // 1
cout << "#5: " << this->Derived::bar << endl; // 2
}
};
int main()
{
Derived test;
test.Test();
}
Questo perché i dati reali memorizzati in classe è come questo:
struct {
Base::bar = 1;
Derived::bar = 2; // The same as using bar
}
Naturalmente, se 'bar' è una funzione virtuale invece di un membro di dati, c'è una differenza tra i due. Nota anche che puoi combinarli come 'this-> Foo :: bar'. – dyp