This
pointer は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 layout
address
pointer
object
しかし、クラス内メソッドのアドレスを持っているのに、derived
クラスメソッドにオフセットできないのはなぜですか。start
(derived)object
base
上記の理解のためにこれを行うことができない理由を理解することはできません。ここで非常に基本的なものが欠けています。