37. Never redefine a function's iherited default parameter value.
绝不重新定义继承而来的缺省参数值
virtual函数是动态绑定,而缺省参数是静态绑定。
class Shape
{public:enum ShapeColor {Red, Green, Blue };virtual void draw(ShapeColor color = Red) const = 0;...
};class Rectangle : public Shape
{public:// 赋予不哦那个的缺省参数值,糟糕virtual void draw(ShapeColor color = Green) const;...
};class Circle : public Shape
{public:virtual void draw(ShapeColor colo) const {}// 请注意,以上这么写则当客户以对象调用此函数,一定要指定参数值,因为静态绑定下这个函数并不从其basee继承缺省值。// 但是若以指针或者引用调用其函数,可以不指定参数值,因为动态帮顶下这个函数会从其base继承缺省参数。
}
现在考虑这些指针:
Shape* ps; // 静态类型为Shape*,动态类型为null,因为没有指向任何类型
Shape* pc = new Circle; // 静态类型为Shape*,动态类型为Circle*
Shape* pr = new Rectangle; // 静态类型为Shape*,动态类型为Rectangle*
静态类型是变量的声明类型,动态类型是实际指向的类型。静态类型不可改变,动态类型可以改变。
对于如下调用:pr->draw();
Rectangle::draw函数的缺省参数应该是GREEN,但是pr的静态类型为Shape*,所以此调用的缺省参数值来自Shape class而非Retangle class!结局是Shape Class和Retangle Class的draw声明各出一半力。
请记住:
绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而virtual函数–你唯一应该覆写的东西–确实动态绑定。
37. Never redefine a function's iherited default parameter value.相关推荐
- pycharm报黄提示(黄色高亮警告):non-default parameter follows default parameter(定义时将没有默认值的参数放到了有默认值参数的后面)
今天看QWidget源码的时候,看见里面有个参数被pycharm用红色波浪线标注,鼠标移动到上面,显示: non-default parameter follows default parameter ...
- java default parameter_JAVA菜鸟入门(7) default parameter , float/double vs BigDecimal
1 java的允许函数的默认参数吗? java不支持类似C++那样,为函数设定默认参数,所以需要做的事情是,自己用函数重载的方式进行模拟.如下 public class FFOverload { p ...
- C++进阶_Effective_C++第三版(六) 继承与面向对象设计 Inheritance and Object-Oriented Design
继承与面向对象设计 Inheritance and Object-Oriented Design 面向对象编程已经风靡编程界,关于继承.派生.virtual函数等等需要深入了解. 32.确定你的pub ...
- Effective C++ 中文版(第三版)读书笔记 更新ing~
Effective C++ 中文版(第三版)持续更新ing 让自己习惯C++ 条款1 视c++为一个联邦 条款2 尽量以const,enum,inline替换#define 条款3 尽可能使用cons ...
- (6)继承与面向对象设计- Effective C++改善程序与设计的55个具体做法(Effective C++: 55 Specific Ways to Improve Your Programs)
文章目录 32. 确定你的public继承塑模出is-a关系(Make sure public inheritance models "is-a") 33. 避免遮挡继承而来的名称 ...
- Effective C++改善程序与设计的55个具体做法笔记
Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...
- 《Effective C++》》阅读笔记
第一章 Accustoming Yourself to C++ 1 View C++ as a federation of language (1). ...
- Effective C++ 改善55个方法
美·Scott Meyers 候捷 电子工业 2011 刚才看到个会议时间有点晚,3.25论文都提交了 谷歌去广告的插件, 最后投了这个会议,刚刚好正合适.我说金钱与时间 ACCUSTOMING YO ...
- SQL Server内联表值函数
In this article series, we will find basics and common usage scenarios about the inline table-valued ...
- 一天搞定DXUT三步曲之一:DXUT框架
当初学GL的时候, 一直想写那个HDR的SHADER程序,苦于没有框架,再加上GL的例子太少,最后果断踏上了DX这条不归路.花了一天时间(准确的说是第一天的上午和第二天的下午)把DXUT的框架学习了, ...
最新文章
- 笔记-项目范围管理-复习要点
- Python的类Class中__init__函数和self
- [linx] ubuntu网络重启命令
- pentaho DI--- Tutorial (spoon)
- 我画了35张图,就是为了让你深入 AQS!
- 定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。
- 电商海报怎么设计,先告诉复古海报要设计要点(附模板)
- Linux学习笔记015---Centos关机命令
- VMware中linux访问共享文件夹设置流程
- python集合_Python集
- 区块链 以太坊 solidity 事务控制和异常处理 require assert
- D-Bus 性能分析
- chrome Axure插件(Mac版)
- 基于matlab的基带gmsk调制解调,基于MATLAB的GMSK调制解调实验
- [云原生专题-34]:K8S - 核心概念 - 网络 - Web服务器与反向代理服务器nginx入门介绍
- CSS | 如何达到监听页面滚动的效果?
- 基于COLA架构创建运输微服务应用和DDD领域建模
- [渝粤教育] 天水师范学院 无机及分析化学 参考 资料
- 微信公众号开启开发者模式
- BUUCTF reverse题目 内涵的软件