C++沉思录读书笔记

  抽象是有选择的忽略,编程也依赖于一种选择,选择忽略什么、何时忽略。编程就是通过建立抽象来忽略那些我们此刻并不重视的因素。

  在使用你的程序时,如果因为不遵守规则而导致工作失败,大部分人不会反躬自省,而会怪罪到你头上。 

第四章 类设计者的核查表

  1. 你的类需要一个构造函数吗?
  2. 你的数据成员是私有的吗?
  3. 你的类需要一个无参的构造函数吗?
  4. 是不是每个构造函数初始化所有的数据成员?
  5. 类需要析构函数吗?
  6. 你的类需要虚析构函数吗?
  7. 你的类需要复制构造函数吗?
  8. 你的类需要一个赋值操作符吗?
  9. 你的赋值操作符能正确的将对象赋给对象本身吗?
  10. 你的类需要定义关系操作符吗?
  11. 记得在复制构造函数和赋值操作符的参数类型加上const了吗? 复制构造函数不会改变原对象,实际上绑定一个非const引用到一个临时的对象是非法的,使用X::X(X&)作为复制构造函数不会允许复制任何特殊表达式的结果。同样的道理也适用于赋值:使用X::operator=(const X&), 而不是X:operator=(X&).
  12. 如果有引用参数,它们应该是const引用吗?
  13. 只有函数想改变参数时,它才应该有不用const声明的引用参数。
  14. 记得适当地声明成员函数为const了吗?
class X
{
public:
    X(){} // 如果没有默认构造函数,则 X a;报错

    X(X&)
    {
        cout << "cp ctr" << endl;
    }
};

X getX()
{
    X temp;
    return temp;
}
int main()
{
    X a;
    X c(getX());// error: cannot bind non - const lvalue reference of type 'X&' to an
        //rvalue of type 'X'
    return 0;
}
View Code

 

  定义名为代理surrogate的对象,代理运行起来和它所代表的对象基本相同,但是允许将整个派生层次压缩在一个对象类型中。

 

posted on 2019-08-03 21:09  flysong  阅读(110)  评论(0编辑  收藏  举报

导航