私はC++で何か不思議です。次のコードを認めるthis-> fieldとClass :: fieldの違いは?
:私のクラスインサイド
int bar;
class Foo
{
public:
Foo();
private:
int bar;
};
は、this->bar
とFoo::bar
の間に違いはありますか? 1つが無効な場合がありますか?
私はC++で何か不思議です。次のコードを認めるthis-> fieldとClass :: fieldの違いは?
:私のクラスインサイド
int bar;
class Foo
{
public:
Foo();
private:
int bar;
};
は、this->bar
とFoo::bar
の間に違いはありますか? 1つが無効な場合がありますか?
内部クラス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
}
};
ありがとう!私はそれを持っている;) –
私がC/C++で勉強したことについては、何かの上で - >を使うのは主にポインタオブジェクトのためのもので、::は名前空間やスーパークラスの一部であるクラスに使われます
私はまだ違いが表示されません。 –
これは、:: std :: cout << ""; ::を使用すると、using namespace stdの代わりにstd名前空間の直接実装を使用していることを意味します。あなたのファイルに。 - >は、別のオブジェクトへのポインタを「指している」ようなものです。それは私がそれらが使用されているのを見た方法です。 – user2277872
同じ名前の別のクラス(ほとんどの場合、基本クラス)の変数を参照することもできます。私にとっては、この例から明らかですが、それがあなたに役立つことを願っています。
#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();
}
クラスに保存されている実際のデータは、このようなものですので、これはされています。もちろん
struct {
Base::bar = 1;
Derived::bar = 2; // The same as using bar
}
'bar'は、仮想関数の代わりにデータメンバーである場合、2つの違いはあります。また、 'this-> Foo :: bar'のように組み合わせることもできます。 – dyp