Effective C++ 条款18:让接口容易被正确使用
接口需要传什么参数
例如一个日期类
class Date {
public:
Date(int month, int day, int year);
};
年月日是三个必要数据,不同国家年月日的排列不同。所以这个是有歧义的。解决方法是设计年月日三个类,并且不让隐式转型。
class Month{
public:
explicit Month(int m): value(m){}
private:
int value;
};
class Day{
public:
explicit Day(int d): value(d){}
private:
int value;
};
class Year{
public:
explicit Year(int y): value(y){}
private:
int value;
};
这样虽然可以确定年月日了,但是月和日没有限定,一年只能有12月。可以用下面的方法,让类提供静态方法创建对象。而不让用户自己创建。
class Month {
public:
static Month Jan() {return Month(1);}
private:
explicit Month(int m);
};
后面还提了很多老生常谈的问题。比如什么接口要求用户必须记得做某些事,就是有着不正确使用倾向之类的。

浙公网安备 33010602011771号