【发布时间】:2014-10-06 06:00:46
【问题描述】:
据我所知,虚函数调用通常需要指针或引用。所以我对以下代码感到非常惊讶。
#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。 -
扩展 chris 的评论:在每个类的内部方法中,总是有一个
*this的隐式指针。所以call()和this->call()在你的代码中是一样的。 -
虚拟函数和其他函数一样,唯一的区别是关键字“虚拟”。因此所有函数都具有相同的属性,您可以将它们定义为 void 或返回语句。
标签: c++ pointers reference virtual