条款38:绝对不要重新定义继承而来的缺省参数值

1,首先可以安全的把问题讨论局限于"继承一个带有缺省参数的虚拟函数"
那么理由非常直接明了:
虚拟函数系动态绑定,而缺省参数却是静态绑定.

实例代码:

#include <iostream>
#include <string.h>

using namespace std;

enum ShapeColor { RED, GREEN, BLUE };
// a class for geometric shapes
class Shape
{
public:
virtual void draw(ShapeColor color = RED)
{
cout << "Shape:" << color << endl;
}
};
class Rectangle: public Shape
{
public:
virtual void draw(ShapeColor color = GREEN) const
{
cout << "Ractangle:" << color << endl;
}

};

int main()
{
Shape* pb1 = new Shape;
pb1 -> draw();

Shape* pb2 = new Rectangle;
pb2 -> draw(); //基类默认

Rectangle* pb3 = new Rectangle;
pb3 -> draw(); //派生类默认

return 0;
}

注意:pb2 -> draw(); //基类默认
当你调用一个定义在Derived class内的虚拟函数时,却使用基类为它指定的缺省参数值.

2,C++为啥要坚持这么运作捏?
答案:又是执行时的效率.
如果缺省参数也是动态绑定,编译器就必须通过某种办法在执行时期为虚拟函数决定适当的缺省参数值.这样的机制更慢更复杂.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值