C++使用虚函数时,子类的函数不能被正确调用的问题解决

问题描述

在使用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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值