那么我的问题有点棘手。 比方说,我有三个类,像这样:从派生类调用基本函数时会发生什么?
class GrandFather
{
public:
virtual int DoSomething()
{
return 3;
}
};
class Father : public GrandFather
{
};
class Child : public Father
{
public:
virtual int DoSomething()
{
Father::DoSomething();
}
};
我已经在一些参考文献中,在调用基本功能时,整个虚拟机制不使用,名称重整发生。
现在我想知道如何做到这一点。
Child类有一个指向它自己的vtable的指针,这将指示在调用DoSomething()
时调用子对象的实现。
父类也有一个指向它自己的vtable的指针,这将指示在调用DoSomething()
时调用GrandFather的实现。
当我在儿童内部使用Father::DoSomething()
时,应该调用GrandFather::DoSomething()
, 但儿童怎么能告诉功能在哪里?
如果真的使用名字mangling,那么怎么样?因为没有该名称的功能(类似_Father_DoSomething(this)
)。
孩子必须访问父亲的vptr才能到达GrandFather::DoSomething()
,据我所知,他不能。
这一直困扰我很长一段时间,所以我会非常感谢帮助。 谢谢:)
你尝试了什么!编译错误,运行时错误,具体! –