Thispointer はClassName非 const メンバー関数の型を持っています。
class Base
{
public:
void get()
{
//this->put(); Why can't I call back a derived class method eventhough
**this** is pointing to derived class object.
}
};
class derived: public Base
{
public:
void put()
{
// do somthing.
}
};
int main()
{
derived d;
//d.get();
d.put();
return 0;
}
両方の関数でポインターの値をthis出力すると、それは同じであり、派生クラス オブジェクトに対して呼び出されたことを示します。また、thisポインタ型もderived *ここにあります。
また、私が理解してpointerいるように、メソッドを呼び出すときに to オブジェクトがある場合は、そのtoの現在から始まるoffset全体でメソッドが存在する場所を指しているだけです。object layoutaddresspointerobject
しかし、クラス内メソッドのアドレスを持っているのに、derivedクラスメソッドにオフセットできないのはなぜですか。start(derived)objectbase
上記の理解のためにこれを行うことができない理由を理解することはできません。ここで非常に基本的なものが欠けています。