条款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 绝不重新定义继承而来的缺省参数值的主要内容,如果未能解决你的问题,请参考以下文章

effective C++ 读书精华笔记提取

Item 37:不要重写父类函数的默认参数

js中的callapplybind

Effective C++ 6.继承与面向对象设计

Python函数:函数的定义语法调用参数类型(必选参数缺省参数可选参数关键字可选参数)return返回值函数嵌套

php重载