Effective C++读书笔记---设计与声明

良好的设计与声明习惯可以有效提高C++代码质量。

在设计接口时请记住一个原则:.让接口容易被正确使用,不易被误。

以下方法可供参考:

a.增加新的类型预防用户调用接口出错

假设如下例子:
class Date
{
  public:
    Date(int month,int day,int year);
}

用户有可能将年、月、日的顺序搞反
struct Day{};
struct Month{};
struct Year{};
class Date
{
  public:
    Date(const Month& m,const Day& d,const Year& y);
}

结论:明智而审慎的导入新类型可以有效预防接口被误用。
b.尝试以函数替换对象,如限制月份的大小
class Month
{
  public:
    static Month Jan() {return Month(1)};
    static Month Feb() {return Month(2)};
     ...
  private:
    explict Month(int m);
}
Date d(Month::Mar(),Day(30),Year(1995)); //函数替换对象,表现某个特定月份,易于理解又可限制输入范围

c.限制类型内什么事可做,什么事不可做。对于用户自定义的类型,应该尽量与内置类型的行为保持一致。
如 if(a*b = c)  //"以const 修饰operator*的返回类型"

记住:任何接口如果要求客户必须记得做某些事情,就是有着“不正确使用”的倾向。如:

I

nvestment* CreateInvestment();
std::tr1::shared_ptr<Investment> creatInvestment();//返回一个智能指针可以有效防止用户忘记释放资源
//shared_ptr提供的构造函数可以接受两个实参:一个是被管理的指针,一个是引用次数变为零时将被调用的“删除器”。

std::tr1::shared_ptr<Investment> createInvestment()

{
   std::tr1::shared_ptr<Investment> retVal(static_cast<Investment*>(0),getRidOfInvestment);
   retVal = ...;
   return retVal;
}
当你传出一个智能指针的时候,会给调用者减少很多负担。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值