C++:设计与声明

文章目录

  • 18:让接口容易被正确使用,不易被误用
  • 19:设计class犹如设计type

18:让接口容易被正确使用,不易被误用

看下面的这个场景

class Date
{
public:
	Date(int year, int month, int day)
		:_year(year)
		,_month(month)
		,_day(day)
	{}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	// 正确的使用
	Date d1(2000, 1, 15);
	// 错误的使用
	Date d2(1, 15, 2000);
	return 0;
}

对于不同国家或是地区的表示日期的方式来说,出现这样有歧义的调用方式是很正常的,基于这样的原因,可以考虑设计出下面的这种模式

struct Day
{
	explicit Day(int val = 0)
		:_val(val)
	{}
	int _val;
};

struct Month
{
	explicit Month(int val = 0)
		:_val(val)
	{}
	int _val;
};

struct Year
{
	explicit Year(int val = 0)
		:_val(val)
	{}
	int _val;
};

class Date
{
public:
	Date(const Year& year, const Month& month, const Day& day)
		:_year(year)
		, _month(month)
		, _day(day)
	{}
private:
	Day _day;
	Month _month;
	Year _year;
};

int main()
{
	// 错误的调用
	Date d1(2000, 1, 15);
	Date d2(Month(1), Day(15), Year(2000));
	// 正确的调用
	Date d2(Year(2000), Month(1), Day(15));
	return 0;
}

好的接口很容易被正确使用,不容易被误用。你应该在你所有接口中努力达成这些性质。
“促进正确使用”的方法包括接口的一致性,以及与内置类型的行为兼容。
“阻止误用”的方法包括建立新类型,限制类型上的操作,束缚对象值,以及消除客户的资源管理责任

19:设计class犹如设计type

这个小结讨论的内容是,关于设计类应该兼顾什么问题

你可能感兴趣的:(书籍笔记,C++,c++,开发语言)