据我所知,虚函数调用通常需要指针或引用。所以我对下面的代码感到非常惊讶。
#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()
的定义中,call()
实际上意味着 this->call()
。虚函数调用是使用当前对象的虚表执行的。
关于没有指针或引用的c++虚函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25276635/