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

后面还提了很多老生常谈的问题。比如什么接口要求用户必须记得做某些事,就是有着不正确使用倾向之类的。

posted @ 2021-07-03 19:19  Destiny233  阅读(32)  评论(0)    收藏  举报