struct Dog{
int a;
int b;
};
int Dog::*location = &Dog::a
Dog* obj1 = new Dog;
obj1->*location = 3;
とはどういう&Dog::a
意味ですか?
struct Dog{
int a;
int b;
};
int Dog::*location = &Dog::a
Dog* obj1 = new Dog;
obj1->*location = 3;
とはどういう&Dog::a
意味ですか?
クラスのデータメンバーへのポインターのようなメンバーへのポインターを作成しますが、クラスインスタンスはまだ決定されておらず、単なるオフセットです。(注: 多重継承または仮想継承と組み合わせると、単純なオフセットよりもかなり複雑になります。ただし、コンパイラが詳細を解決します。)
最後の行で使用されているポインターからメンバーへの逆参照演算子に注意してください->*
。ここでは、クラス インスタンスがポインターからメンバーと組み合わされて、特定のインスタンスの特定のデータ メンバーが生成されます。
この変数location
は「メンバー データ ポインター」と呼ばれます。これは構造内の何かへのポインターですが、実際のオブジェクト ポインターと共に使用しないと意味がありません。を単独で使用し*location
ても、実際の住所を解決するには十分な情報ではありませんがobj1->*location
、実際の場所を参照します。
& は、何かのアドレスを取ることを意味します。