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

原创 2013年12月03日 09:31:31
//////////////////////////////////////////////////////////////////////////
// Effective C++. 
// Item 37: Never redefine a function's inherited default parameter value.
// 绝不重新定义继承而来的缺省参数值
class IShape
{
public:
	enum ShapeColor{ Red, Green, Blue };
	virtual void draw(ShapeColor color = Red) const = 0;
};

class CRectangle: public IShape
{
public:
	virtual void draw(ShapeColor color = Green) const
	{
		int a = 0;
		return;
	}
};

int main()
{
	IShape* pRectangle = new CRectangle;
	if (pRectangle)
	{
		// 因为默认参数是静态绑定,所以这里传到CRectangle::draw()里的参数是Red,而不是Green
		pRectangle->draw();
	}
	return 0;
}

相关文章推荐

Effective C++:绝不重新定义继承而来的缺省参数值

考虑下面这段程序: #include using namespace std; class Shape { public: enum ShapeColor { Red, Green, B...

《Effective C++ 》学习笔记-第六章 条款37:绝不重新定义继承而来的缺省参数值

Never redefine a function's inherited default parameter value

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

重新定义一个继承而来的non-virtual函数永远都是错误的,本条款的讨论限制在“带有缺省参数的virtual函数”。 virtual函数是动态绑定的,而缺省参数却是静态绑定。对象的所谓静态类型,...

《Effective C++》读书笔记之item37:绝不重新定义继承而来的缺省参数值

1.绝不重新定义继承而来的缺省参数值,它有两层意思: (1)如果函数是非虚函数,你根本不应该重新定义它,因此也谈不上改变缺省参数值了。(2)如果函数是虚函数,由于缺省参数值是“静态绑定”,即使使...

C++之绝不重新定义继承而来的缺省参数值(37)---《Effective C++》

条款37:绝不重新定义继承而来的缺省参数值首先让我们进行分析,类的继承中只能继承两种函数,virtual和non-virtual,然鹅重新定义一个继承而来的non-virtual函数永远是错误的,所以...

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

重新定义一个继承而来的non-virtual函数永远都是错误的,本条款的讨论限制在“带有缺省参数的virtual函数”。 virtual函数是动态绑定的,而缺省参数却是静态绑定。对象的所谓静态类型,...

条款38: 决不要重新定义继承而来的缺省参数值(有味道的一条)

让我们从一开始就把问题简化。缺省参数只能作为函数的一部分而存在;另外,只有两种函数可以继承:虚函数和非虚函数。因此,重定义缺省参数值的唯一方法是重定义一个继承而来的函数。然而,重定义继承而来的非虚函数...

决不要重新定义继承而来的缺省参数值

条款38: 决不要重新定义继承而来的缺省参数值让我们从一开始就把问题简化。缺省参数只能作为函数的一部分而存在;另外,只有两种函数可以继承:虚函数和非虚函数。因此,重定义缺省参数值的唯一方法是重定义一个...
  • cceefor
  • cceefor
  • 2011年03月27日 15:51
  • 218

不要重新定义继承而来的缺省参数值

–effective c++ item 37首先,简化一下问题.你只能继承两种函数:virtual 和 non-virtual 函数 .而重新定义一个继承而来的non-virtual函数永远是错误的....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:绝不重新定义继承而来的缺省参数值
举报原因:
原因补充:

(最多只允许输入30个字)