Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save wen-long/f57ff2a3b0b928a15dc0 to your computer and use it in GitHub Desktop.
Save wen-long/f57ff2a3b0b928a15dc0 to your computer and use it in GitHub Desktop.

###C++ Primer第5版 学习笔记

####第七章

  1. 类的成员函数通过顶层 const 指针 this 访问调用它的那个对象,任何对类成员的直接访问都被看做 this 的隐式引用,不得自定义名为 this 的参数或变量,可以在成员函数体内使用 this
  2. const 成员函数相当于将 this 定义为底层 const,这种函数叫常量成员函数
  3. 编译器处理类,先编译成员声明,然后才轮到成员函数体,因此成员函数体可以随意使用其他成员而无需考虑顺序
  4. 有些非成员函数,概念上属于类,但实际上不属于类本身,那么如果他们不是定义在类中,则一般应与类声明(而非定义)在同一个头文件内
  5. 一般来说,如果非成员函数是类接口的组成部分,则这些函数的声明应该与类在同一个头文件内
  6. 编译器创建的构造函数称为合成的默认构造函数(synthesized default constructor)
  7. 类名() = default;//要求编译器生成构造函数,放在类内部则 inline,外部反之,如果同时还有有其他构造函数对所有形参赋予默认值,则在调用时会发生歧义
  8. 友元声明只能放在内的内部,通常把友元的声明与类本身放置在同一个头文件中
  9. 用来定义类型的成员(typedef, using)必须先定义后使用
  10. inline 成员函数应与类定义在同一个头文件中
  11. mutable 声明总是可变的变量
  12. C++11中,默认初始化的最好方式是把默认值声明成一个类内初始值({}或=)
  13. 由于常量成员函数返回 const 引用,因此很可能无法用在函数调用链中,解决办法是创建 const 和 非 const 的两个重载函数,调用同一个 const 函数执行动作(返回值可以为 void),但返回 const 和 非 const 引用
  14. 对不完全类型,只能用于定义指向该类型的指针或引用,和声明(但不能定义)以该类型为参数或返回值的函数
  15. 友元函数能定义在类内部,此时隐式内联
  16. 类和非成员函数的声明不是必须在他们的友元声明之前,但哪怕友元函数定义在了类内部,在其他函数使用该友元函数时,也需要之前有函数声明存在
  17. 应该使用构造函数初始值列表进行初始化,const 和 引用初始化的唯一机会就是通过构造函数初始值,初始化的顺序与其在类定义中出现的顺序相同,最好令两个顺序一致
  18. 委托构造函数
class Sales_date {
public:
Sales_date(string s, unsigned cnt,double price):
          bookNo(s), units_sold(cnt), revenue(cnt*price) {}
Sales_date(): Sales_date("", 0, 0)   {}//委托给了上一个构造函数,上一个构造函数执行完毕后执行本函数函数体
}
  1. 将构造函数声明为 explicit 阻止隐式类类型转换,该声明不应再类外部的函数定义处重复
  2. 类的静态成员函数没有 this 指针,因此也就不能为 const
  3. static 关键字不能重复,只能出现在类内部的声明语句
  4. 最好把静态数据成员的定义与其他非内联函数的定义放在同一个 .cc 文件中,以防重复定义
  5. 不建议在类内部初始化静态成员,如果在内部初始化了,通常也应该在类外部定义一下(但不能指定初始值)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment