"this"ポインタを理解したい。私は "this"ポインタがクラスオブジェクトの値を参照すると考えました。 ただし、以下のコードでは、私は「この」ポインタの異なる値を見ることができました。このプログラムのC++: "this"ポインタを理解する
#include <stdio.h>
class InterfaceA{
public:
virtual void funa() = 0;
};
class InterfaceB{
public:
virtual void funb() = 0;
};
void globala(InterfaceA* obj){
printf("globalA: pointer: %p\n\r",obj);
}
void globalb(InterfaceB* obj){
printf("globalB: pointer: %p\n\r",obj);
}
class concrete : public InterfaceA, public InterfaceB{
public:
void funa(){
printf("funa: pointer: %p\n\r",this);
globala(this);
globalb(this);
}
void funb(){
printf("funb: pointer: %p\n\r",this);
globala(this);
globalb(this);
}
};
int main(int argc, char *argv[])
{
concrete ac;
ac.funa();
ac.funb();
return 0;
}
出力が得られます。
funa: pointer: 0x7ffff67261a0
globalA: pointer: 0x7ffff67261a0
globalB: pointer: 0x7ffff67261a8
funb: pointer: 0x7ffff67261a0
globalA: pointer: 0x7ffff67261a0
globalB: pointer: 0x7ffff67261a8
すべてのヘルプはこれを理解すること。
ありがとうございました。
私はあなたの実際の質問は、ポインタがdifに渡された関数に渡されたときferentクラス。 –
私はあなたの質問を非常に興味深いと感じました、そして、私はそれを覆すために非常に苦労しました。私は、対応する(重複した)質問でオブジェクトのレイアウトを説明しようとしているいくつかの数字とともに、拡張された答えを掲示しました。それをチェックしてみてください、それはあなたを助けるかもしれません! – sestus