设计与声明

条款18:让接口容易被正确使用,不易被误用

  

条款19:设计class犹如设计type

 

条款20:宁以pass-by-value-to-const替换pass-by-value

  缺省情况下C++以by value方法给对象传递参数,函数参数都是对象的副本,这些副本是由对象的copy构造函数产出,这可能使得函数调用操作更加费时(一次copy构造函数的调用,函数结束时一次析构函数的调用)。

  可以将函数声明为下面的形式,这样将不会有任何额外的构造函数和析构函数的调用:

void func (const Student& student)

  参数声明中的const是重要的,可以让调用者知道函数内不会对student做出任何修改。

  这种方法还可以避免参数作为其父类传入函数后,函数内仅仅留下父类对象的情况。

  这个规则并不适用于内置类型、STL的迭代器以及函数对象。

 

条款21:必须返回对象时,别妄想返回其reference

  任何函数返回一个reference指向某个local对象结果都将是错误的,因为local对象在函数结束后就会被销毁。

 

条款22:将成员变量声明为private

  

条款23:宁以non-member、non-friend替换member函数

  non-member、non-friend函数能提供比member函数更高的封装性。

  封装的好处在于我们能改变事物而只影响有限的客户。可以粗略的说,越多函数可以访问到一个类,这个类的封装性越差。

  通常的做法是让non-member函数跟相对应的类放到同一命名空间下:

namespace WebBrowserStuff {
    class WebBrowser { ... };
    void clearBrowser() { ... };
    ...
}

 

条款24:若所有参数皆需类型转换,请为此采用non-member函数

  

条款25:考虑写出一个不抛异常的swap函数

  

posted @ 2015-03-04 20:36  一同  阅读(129)  评论(0编辑  收藏  举报