Effective_C++:38、绝对不要重新定义继承而来的缺省参数值

38、绝对不要重新定义继承而来的缺省参数值

1、缺省参数值的静态绑定

虚拟函数是动态绑定的,非虚拟函数是静态绑定的。

对于非虚拟函数,绝对不应该重新定义,见Effective_C++:37https://blog.csdn.net/l1dian11/article/details/81603168

对于虚拟函数,由于函数的缺省参数值是静态绑定的,即通过指针调用函数时缺省参数值由指针的声明型别决定,而指针调用的函数是由指针指向的对象的型别来决定。考虑用一个指向派生类对象的基类指针来调用某个虚拟函数,即是调用派生类的函数却赋予其基类函数的缺省参数值。此时,这肯定不是我们期望的结果。

2、不要重新定义继承而来的缺省参数值

缺省参数值的静态绑定使得调用虚拟函数时,出现基类函数的缺省参数值与派生类函数的奇怪组合。因此,一种方法是绝对不要重新定义继承而来的缺省参数值,使得这个组合与派生类函数及其缺省参数值的组合一致。而让缺省参数值也施行动态绑定,同样可以解决问题,然而这种方法慢且复杂,被编译器放弃。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值