Effective C++ 条款18
让接口easy被正确使用,不easy被误用
如题目,我们自己的程序接口是面向用户的,程序的目的不可是解决这个问题,并且要让用户easy使用。所以。必须保证我们的程序接口具有非常强的鲁棒性。
怎么保证接口的鲁棒性,不同情况有不同的处理结果,作者列出了以下几个样例所相应的方法。
1.设计一个class来表示日期
class Date{
public:
 void Date(int month, int day, int year);
 ……
};
以上的构造接口非常easy被用户用错
Date d(30, 3, 1995);//把月和日弄反了
作者的方法是定义新形式。新类型。
struct Day{
explict Day(int d):val(d){};
int val;
}
struct Month{
explicit Month(int m):val(m){}
int val;
};
struct Year{
explicit Year(int y):val(y){}
int val;
};
class Date{
public:
 void Date(const Month& m, const Day& d, const Year& y);
 ……
};
2.另外一种情况。为了防止出现以下的赋值把operator*返回const类型。以下的语句就无法通过编译
 if(a*b=c)//这里事实上打算做比較,而不是赋值
3.使用智能指针
shared_prt<Investment> createInvestment()
 {
    shared_prt<Investment> retVal(static_cast<Investment*>(0),
                                    getRidOfInvestment);
    retVal=……;//令retVal指向正确对象
    return retVal;
 }
Effective C++ 条款18的更多相关文章
- Effective C++ -----条款18:让接口容易被正确使用,不易被误用
		
好的接口很容易被正确使用,不容易被误用.你应该在你IDE所有接口中努力达成这些性质. “促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容. “阻止误用"的办法包括建立新类型.限 ...
 - effective c++  条款18 make interface easy to use correctly and hard to use incorrectly
		
举一个容易犯错的例子 class Date { private: int month; int day; int year; public: Date(int month,int day,int ye ...
 - [More Effective C++]条款22有关返回值优化的验证结果
		
(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回 ...
 - More Effective C++ 条款0,1
		
More Effective C++ 条款0,1 条款0 关于编译器 不同的编译器支持C++的特性能力不同.有些编译器不支持bool类型,此时可用 enum bool{false, true};枚举类 ...
 - Effective C++ 条款08:别让异常逃离析构函数
		
1.别让异常逃离析构函数的原因 <Effective C++>第三版中条款08建议不要在析构函数中抛出异常,原因是C++异常机制不能同时处理两个或两个以上的异常.多个异常同时存在的情况下, ...
 - Effective C++ -----条款28:避免返回handles指向对象内部成分
		
避免返回handles(包括reference.指针.迭代器)指向对象内部.遵守这个条款可增加封装性,帮助const成员函数的行为像个const,并将发生“虚吊号码牌”(dangling handle ...
 - Effective C++ -----条款21:必须返回对象时,别妄想返回其reference
		
绝不要返回pointer或reference指向一个local stack对象,或返回reference指向一个heap-allocated对象,或返回pointer或reference指向一个loc ...
 - Effective C++ -----条款19:设计class犹如设计type
		
Class的设计就是type的设计.在定义一个新type之前,请确定你已经考虑过本条款覆盖的所有讨论主题. 新type的对象应该如何被创建和销毁? 对象的初始化和对象的赋值该有什么样的区别? 新typ ...
 - Effective C++:条款27——条款
		
条款27:尽量少做转型动作 单一对象可能拥有一个以上的地址!
 
随机推荐
- Arduino红外遥控系列教程2013——发射与接收
			
教程一:红外接收教程本教程共四步操作,将教大家如何收集电视红外遥控器的编码 视频链接:http://v.youku.com/v_show/id_XNTE2NjQ5NTcy.html 第一步:电路连接, ...
 - Delphi 常用API 函数(好多都没见过)
			
AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小AnyPopup 判断屏幕上是否存在任何弹出式窗口ArrangeIconicWindows 排列一个父窗口的最小 ...
 - IIS给网站地址配置成HTTPS的
			
2.增加网站绑定 3.如果https的URL访问不了,可能是443端口被占用 然后netstat -anono
 - Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Zepto 1.0 中文手册,Zepto 1.0 API-translate by yaotaiyang
			
Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Z ...
 - CentOS 6.8yum源的配置
			
Centos配置163的yum源 1.首先备份当前系统的yum源 # mv /etc/yum.repo.d/Centos-Base.repo /etc/yum.repo.d/Centos-Base.r ...
 - OAuth2.0 错误码
			
http://open.taobao.com/doc/detail.htm?id=118 OAuth2.0 错误码 新浪微博OAuth2.0实现中,授权服务器在接收到验证授权请求时,会按照OAuth2 ...
 - Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
			
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...
 - Tsinghua dsa mooc pa1
			
第一题Range 关键:二分查找,查找不大于一个数的最大下标. #include <cstdlib> #include <cstdio> 4 int compare (cons ...
 - WampServer2.5的XDebug调试不成功的原因
			
WampServer2.5的php.ini文件位置很奇妙,除了在“wamp\bin\php\php5.5.12”目录下有一个外,“wamp\bin\apache\apache2.4.9\bin”目录下 ...
 - 自学HTML5第三节(拖放效果)
			
今天来看看网页上的拖放效果,首先来看看什么是拖放———— 拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 浏览器支持 Inte ...