博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
effective C++中条款37:绝不又一次定义继承而来的缺省參数值
阅读量:5891 次
发布时间:2019-06-19

本文共 855 字,大约阅读时间需要 2 分钟。

virtual 函数会动态绑定,而virtual函数的缺省參数值是静态绑定的。

用一个base类型的指针p去指向一个derived类对象。通过p调用虚函数时,会动态绑定到实际所指对象中的函数;用一个derived类型的指针p2指向一个derived对象,由p2调用函数时,直接就是调用的derived中的函数。其參数值也是derived类中函数相应的參数值。

#include 
using namespace std;class A{public: enum Color {red,green,blue}; A() { cout<<"Construct A"<
dodraw(); p2->dodraw(); return 0;}

上面的程序中。在B类中都重写了A中的两个virtual函数。从而。通过p和p2调用dodraw函数,事实上都是调用的B中dodraw。而B中的dodraw函数调用B中draw函数,从而draw的实參就是B中的缺省实參:red

#include 
using namespace std;class A{public: enum Color {red,green,blue}; A() { cout<<"Construct A"<
dodraw(); p2->dodraw(); return 0;}
上面的程序,B和A中dodraw函数都是来源于A中,由p和p2调用dodraw时。都是调用的A类中的
dodraw函数,dodraw再调用draw函数时。会动态绑定到实际所指的对象B中的draw函数,这在执行期确定,但draw函数的缺省实參是静态绑定的,就是A类中的blue值,这在编译器就已经确定。所以,假设又一次定义继承而来的缺省參数值,会出现一种奇怪的现象:virtual函数用的derived类中的,而參数是用的base类中的。

你可能感兴趣的文章
通过模板批量新建虚拟机,并定义好自定义规范及虚拟机名称和主机名
查看>>
3招彻底封死蹭网的可能性
查看>>
H3C基础配置篇
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
RAID 磁盘陈列详解
查看>>
[HDFS]HDFS优化-小文件合并.md
查看>>
公司组网核心、汇聚、接入层交换机配置
查看>>
一个IO的传奇一生(2)
查看>>
关于Win2003 IIS配置asp的问题
查看>>
C语言单链表的创建,插入,删除,逆致
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
2012年高职《信息安全管理与评估》项目开幕式图片展
查看>>
linux文件描述符
查看>>
Phabricator 开放源代码的软件开发平台 Window Active Directory ldap ad域配置记录
查看>>
如何优化cocos2d/x程序的内存使用和程序大小
查看>>
android 获取信息和安装Apk
查看>>
详解hibernate实体映射文件
查看>>
JSON字符串转JSON对象
查看>>