这两者之间的区别->;字段和类::字段? 我想知道C++中的一些东西。< /P>

这两者之间的区别->;字段和类::字段? 我想知道C++中的一些东西。< /P>,c++,class,pointers,this,scope-resolution,C++,Class,Pointers,This,Scope Resolution,承认以下代码: int bar; class Foo { public: Foo(); private: int bar; }; 在我的课堂上,this->bar和Foo::bar之间有什么区别吗?是否存在无效的情况?对于我所学的摆弄C/C++,在某物上使用->主要用于指针对象,而使用::用于作为名称空间或超类的一部分的类,超类是类Foo中包含的任何对象的一般类(特别是)如果bar不是static,则两者之间没有区别 Foo::bar称为成员的完全限定名bar,此表单在层次结构

承认以下代码:

int bar;
class Foo
{
public:
    Foo();
private:
    int bar;
};

在我的课堂上,
this->bar
Foo::bar
之间有什么区别吗?是否存在无效的情况?

对于我所学的摆弄C/C++,在某物上使用->主要用于指针对象,而使用::用于作为名称空间或超类的一部分的类,超类是类
Foo
中包含的任何对象的一般类(特别是)如果
bar
不是
static
,则两者之间没有区别

Foo::bar
称为成员的完全限定名
bar
,此表单在层次结构中可能有多个类型定义具有相同名称的成员的情况下非常有用。例如,您需要在此处编写
Foo::bar

class Foo
{
  public: Foo();
  protected: int bar;
};

class Baz : public Foo
{
  public: Baz();
  protected: int bar;

  void Test()
  {
      this->bar = 0; // Baz::bar
      Foo::bar = 0; // the only way to refer to Foo::bar
  }
};

他们做同样的事情


但是,您将无法使用
this->
来区分类层次结构中同名的成员。您需要使用
类名::
版本来执行此操作。

它还允许您引用另一个具有相同名称的类(大多数情况下为基类)的变量。对我来说,这个例子很明显,希望它能帮助你

#包括
使用std::cout;
使用std::endl;
阶级基础{
公众:
int-bar;
Base():条(1){}
};
派生类:公共基{
公众:
int-bar;
派生():基(),条(2){}
无效测试(){

cout-gcc不同意
this->
对静态变量不起作用:@Xymostech我很困惑。
clang
也接受它。谢谢你指出。没问题。我也有点困惑。当然,如果
bar
是一个虚拟函数而不是一个数据成员,那么两者之间是有区别的。还要注意,你可以像
this->Foo::bar
一样绑定它们。因为::就像使用std::cout一样,你在“指向”另一个对象的指针。这就是我看到它们的用法。
struct {
    Base::bar = 1;
    Derived::bar = 2; // The same as using bar
}