您的位置:首页 > 其它

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

2010-03-19 18:00 295 查看
问题代码:

class Shape{
public:
enum Color{RED,GREEN,BLUE};
virtual void draw(Color color = RED)const = 0;
...
};
class Circle:public Shape{
public:
virtual void draw(Color color = GREEN)const{ ... }
};
class Rectangle:public Shape{
public:
virtual void draw(Color color)const{ ... }
};
Shape* ps;
Shape* pc = new Circle;
Shape* pr = new Rectangle;
//问题
pc->draw(); //Circle::draw(RED)


修改后:

class Shape{
public:
enum Color{RED,GREEN,BLUE};
void draw(Color color = RED) const{
...
doDraw(color);
...
}
...
private:
virtual void doDraw(Color color) const = 0;
};
class Circle:public Shape{
...
private:
virtual void doDraw(Color color){ ... }
};

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class
相关文章推荐