码迷,mamicode.com
首页 > 其他好文 > 详细

条款37 绝不重新定义继承而来的缺省参数值

时间:2020-06-12 14:23:01      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:动态   pre   span   方式   derived   col   定义   red   继承   

规则: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 绝不重新定义继承而来的缺省参数值

标签:动态   pre   span   方式   derived   col   定义   red   继承   

原文地址:https://www.cnblogs.com/xiongxinxzy/p/13098885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!