11

C++で何か疑問に思っています。

次のコードを認めます。

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

クラス内で と の間に違いはthis->barありFoo::barますか? 無効なケースはありますか?

4

4 に答える 4

12

クラス内Fooでは (具体的には) is not という与えられた 2 つの間に違い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
  }
};
于 2013-04-27T22:13:28.820 に答える
4

彼らはメンバーと同じことをします。

this->ただし、クラス階層で同じ名前のメンバーを区別するために使用することはできません。ClassName::これを行うには、バージョンを使用する必要があります。

于 2013-04-27T22:14:24.340 に答える
0

私がC/C++をいじって学んだことについては、何かに -> を使用することは主にポインターオブジェクト用であり、 :: を使用することは、名前空間の一部であるクラスまたは一般的なクラスであるスーパークラスに使用されますあなたが含めている

于 2013-04-27T22:06:50.467 に答える