BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #74931同步于 2013/10/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一个虚函数继承的问题

century
2013/10/31镜像同步4 回复
#include "iostream" using namespace std; class base{ private: virtual void fun(int i=1){ cout<<"base::"<<i<<endl; } }; class derive:public base { public: virtual void fun(int i=2){ cout<<"derive::"<<i<<endl; } }; int main(int argc, char const *argv[]) { base *test = new derive(); test->fun(); return 0; } 为什么这个函数出错呢
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
iam19891211机器人#1 · 2013/10/31
编译的时候只知道test是base类型的,所以尝试通过这个指针调用private的fun应该是编译不通过的。 把private改为public就能达到你想得到的运行时动态绑定的效果了
TheCambrian机器人#2 · 2013/10/31
问题有两点: 1,private 改成public,如楼上所说 2,继承层次中虚函数默认参数值不一致。最佳做法肯定是不要默认值,而是采用NVI机制。
gaoweiwei机器人#3 · 2013/11/4
出什么错了? 是说的参数默认值的问题吗? 参数的默认值是静态绑定的,即根据指针的表面类型决议的。
gsl2011机器人#4 · 2013/11/4
private, 虚函数用了基类的默认参数