条款十八:让接口容易被正确使用,不易被误用
如果我们设计一个日期类,可能会写成如下的模样
class Date{ public: Date(int month, int day, int year); … };
这个构造函数貌似没有问题,但是她却无法阻止用户输入错误的数据。比如用户可能会把Date(3,30,2015)写成Date(30,3,2015)。
所以说其实当你设计的程序需要假定用户都能按你想像来进行操作的话,这个程序就存在隐患。
一种好的改善方式是让用户知道,传参的时候传递的是哪些内容。我们可以用新的类来代替int
class Month{ private: int m_month; public: explicit Month(int month): m_month(month){} }; class Day{ private: int m_day; public: explicit Day(int day): m_day(day){} }; class Year{ private: int m_year; public: explicit Year(int year): m_year(year){} }; class Date{ private: Year m_year; Month m_month; Day m_day; public: Date(Year year, Month month, Day day): m_year(year), m_month(month), m_day(day){} }; int main(){ Date date(Year(2013), Month(5), Day(28)); }
这样做,一来用户可以明确输入的数据内容,二来,可以在类内添加约束比如
explicit Month(int month): m_month(month){assert(m_month >= 1 && m_month <= 12);}
这样输入非法数据就会报错。
另一种避免用户误用的方式是让编译器对不正确的使用方式加以阻止,比如
const Object operator* (const Object& a, const Object& b);
就可以避免用户写出a = b*c这样的错误代码
还有一点就是要“尽量令你的自定义类型的行为与内置类型行为一致”。打个比方,不要重写了操作符*,却在内部定义+的功能。
最后一点,在管理资源的时候,最好使用专门的资源管理类,比如简单工厂函数的返回值,要设为shared_ptr或者auto_ptr。
相关推荐
effective c++读书笔记和总结 effective c++读书笔记和总结
Finix的精版Effective STL读书笔记
effective java 读书笔记,第二版自己摘要并翻译,以备速查。
Effective-Java读书笔记,别人分享的
effective C++读书笔记,effective C++读书笔记,effective C++读书笔记
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷...此文档是该书的读书笔记。
Effective Java读书笔记.pdf
记录了我的effective-Python学习笔记,精简了effective-Python中重要的部分。effective-Python是一本值得多看几遍的书,但是看后面的几遍的时候完全可以直接看自己的学习笔记。此学习笔记侧重与比较实用的部分即前四...
effective C++ 很好 很不错 最好的C++进阶资料
基于Effective Java第二版的读书笔记,可以帮助你更好的阅读这边Java圣经,更快的理解其思想
2021年EFFECTIVEJAVA读书笔记.docx
摘录了《Effective C++》 (Scott Meyers 著)中有参考价值的编写代码建议,方面阅读
Effective C++ Roy T 读书笔记,比较老的一本书,探讨一下C++。
Effective_C++_3rd 读书笔记 pdf
1.2 条款02:尽量以const,enum,inline替换#define 这个条款或许可以改为“宁可用编译器替换预处理器”。 通常C++要求你对所使用的任何东西提供一个定义式,但如果它是个class专属常量 又是static且为整数类型...
Effective C++学习笔记 没有时间看Effictive C++书的人可以看看这个笔记 总结出了重点啊 适合有c++基础的人阅读
effectiveJava的笔记
Effective Objective-C是本学习Objective-C的好书,没有见pdf版,亚马逊上的这儿本书的价格不菲。让我们来看看书里的内容和完整的学习笔记吧。
关于Effective STL的读后感,还有一些此间想得东西和解决的问题
内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机。