【37】绝不重新定义继承而来的缺省参数值
2013-12-27 19:01
267 查看
1、由于【36】绝不重新定义继承而来的non-virtual方法,现只考虑带有缺省参数值的virtual方法。
2、为什么绝不重新定义继承而来的缺省参数值?
缺省参数值是静态绑定,virtual方法是动态绑定。现在考虑父类virtual方法带有缺省参数值,子类重写了virtual方法,父类指针指向子类对象,调用virtual方法,导致的结果是:用父类的缺省参数值初始化形参,调用子类重写的方法实现。这肯定不是程序员预期的结果。
3、怎么解决这个问题?
使用NVI,父类通过non-virtual方法调用virtual方法,父类non-virtual方法使用缺省参数值,父类virtrual方法不使用缺省参数值,并且是private。子类重写private方法。
4、注意:private virtual方法也是可以重写的,子类的虚方法表中,会进行替换。private virtual方法的影响是:子类不能访问父类的private virtual 方法,父类指针也不能访问自己的private virtual 方法。
2、为什么绝不重新定义继承而来的缺省参数值?
缺省参数值是静态绑定,virtual方法是动态绑定。现在考虑父类virtual方法带有缺省参数值,子类重写了virtual方法,父类指针指向子类对象,调用virtual方法,导致的结果是:用父类的缺省参数值初始化形参,调用子类重写的方法实现。这肯定不是程序员预期的结果。
3、怎么解决这个问题?
使用NVI,父类通过non-virtual方法调用virtual方法,父类non-virtual方法使用缺省参数值,父类virtrual方法不使用缺省参数值,并且是private。子类重写private方法。
4、注意:private virtual方法也是可以重写的,子类的虚方法表中,会进行替换。private virtual方法的影响是:子类不能访问父类的private virtual 方法,父类指针也不能访问自己的private virtual 方法。
相关文章推荐
- sql server中clustered index scan,table scan,index scan
- ubuntu,centOS安装教程
- apache多站点访问
- 解决:easyui中的datagrid详情展开,combobox的级联操作,以及修复combobox总是显示value值的问题
- 【转】C++与Java混合编程
- CentOS安装并设置MariaDB
- CentOS安装并设置MariaDB
- java程序员面试基础知识
- jQuery获取Select选择的Text和Value
- 时间飞逝——大三感悟
- CentOS安装并设置MariaDB
- Websphere服务器Ghost迁移服务器、节点名称修改经验
- SQLite常见警告
- Windows枚举出系统中所有的串口的9种方法
- IOS通过加速感应器实现手机实现手机屏幕上的足球可以来回的滚动反弹
- HTML5存储数据--localStorage长期保存数据
- 卸载qtcreator
- 远程访问mysql
- git的基本使用(2)
- UML的面向对象分析设计过程浅析