据我所知,虚函数调用通常需要指针或引用。所以我对下面的代码感到非常惊讶。
#include <iostream>
using namespace std;
class B{
public:
void runB(){ call(); }
virtual void call(){ cout<<"B\n"; };
};
class D: public B{
public:
void runD(){ runB(); }
void call(){ cout<<"D\n"; }
};
int main(){
D d;
d.runD();
}
输出是
D
有人可以评论一下为什么这个虚拟函数调用有效吗?谢谢。
在成员函数内,对其他成员函数或变量的任何引用都通过隐式解析this
指针。所以在定义中runB()
, the call()
真正意思this->call()
。虚函数调用是使用当前对象的虚表来执行的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)