条款37 绝不重新定义继承而来的缺省参数值
Posted 熊鑫xzy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条款37 绝不重新定义继承而来的缺省参数值相关的知识,希望对你有一定的参考价值。
规则:virtual函数系数动态绑定而缺省的参数是静态绑定。
调用一个定义域derived class内的virtual函数的同时使用的可能是base class为它所指定的缺省参数值。
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; };
以上代码 调用:
Shape *pc = new Rectangle;
pc->draw(); //将调用Rectangle的draw但是默认的参数为red
为什么编译器会选择这种方式呢? 如果缺省的参数是动态绑定那就得在运行期去选择合适的默认参数,比目前这样“在编译器决定”更慢且更复杂。
以上是关于条款37 绝不重新定义继承而来的缺省参数值的主要内容,如果未能解决你的问题,请参考以下文章