条款 18

一,让接口容易被使用,而不易被误用

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));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值