This
指针具有ClassName
非常量成员函数中的类型。
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
到对象,当你调用它,然后你只是指向一个方法offset
,其中该方法是目前在整个object layout
从开始address
存在于pointer
对object
。
但是,derived
当我拥有in类方法的start
地址时,为什么不能偏移该类方法。(derived)object
base
由于上面的理解,我不明白为什么我不能做到这一点。我在这里错过了一些非常基本的东西。
我:编译器编译Base :: get函数时,看不到Derived :: put函数。
您:不是将Derived :: put放在同一文件中吗?为什么编译器看不到?
我:如果4年后有人从另一个文件的Base中派生了一个Derived1 :: putttttt,该怎么办?
你:嗯,也许我明白。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句