问题描述
在使用C++的虚函数时,parent和child类有两个函数,其中一个是虚函数:
class parent{
public:
void init(){cout << "in parent init" << endl;};
virtual void func(int a){
cout << "in parent func" << endl
}
}
class child : public parent{
public:
void init(){cout << "in child init" << endl;};
virtual void func(float a){
cout << "in child func" << endl
}
}
在执行程序时,定义一个父类指针指向子类对象。想要利用虚函数来实现对child中func函数的调用。
int main() {
parent* p2p;// ponit to parent
p2p = new child;
p2p->init();
p2p->func(1.1);
return 0;
}
运行结果:
in child init
in parent func
发现很诡异的现象:init可以正常调用,func无法正常被调用。
解决办法
**可以注意到子类在继承父类的虚函数时,参数不一致。**将参数由int改为了float,导致了这个现象的发生。将子类func函数的参数改为int,即可得到正常的输出:
in child init
in child func
会犯这个错误的原因是做的项目里的例程错误…虽然写下来感觉蛮容易看出来的,但是放在项目里却很难看出,故分享给同样因为子类里的函数没被正常调用而摸不着头脑的人。
最后分享一个学习(纯)虚函数的好地方,里面不光是最高赞回答,包括其他回答以及下面的评论区里都有很多东西可供学习~
https://www.zhihu.com/question/23971699