一,让接口容易被使用,而不易被误用
1,导入新的类型预防客户端错误
下面是我们定义的用来表示日期的class
class Date{
public:
Date(int month, int day, int year);
...
};
对于上面这个自定义的类,用户很容易犯下面这些错误
第一,使用错误的顺序传递参数
Date(30, 3, 2017);
第二,传递一个无效的月份或天数
Date(3, 35, 2017);
2,定义新的类型解决上面的问题
struct Day{
private:
int val;
public:
Day(int d):val(d){}
};
struct Month{
private:
int val;
public:
Month(int m):val(m){}
};
struct Year{
private:
int val;
public:
Year(int y):val(y){}
};
class Date{
public:
Date(int month, int day, int year);
...
};
Date(Month(3), Day(23), Year(2017)); //参数类型正确
Date(Day(5), Month(10), Year(2016)); //参数类型不正确
3,对类型的值进行限制
一旦类型确定,即可以对其值进行限制。例如:一年有12个月,可以使用enum来表示月份struct Month{
private:
explicit Month(int m); //防止生成新的Month对象
public:
static Month Jan(){return Month(1);}
static Month Feb(){return Month(2);}
...
static Month Dec(){return Month(12);}
};
Date(Month::Feb(), Day(12), Year(2016));