这章是类,内容很多,还是需要去用,书上说了那么多,真正用起来,也不知道能用到多少

###类

  1. 类的基本思想是数据抽象和封装
  2. 定义在类内部的函数是隐式的inline函数
  3. 类的所有成员都需要在类的内部声明,但是成员函数体可以定义在类内也可以在类外定义
  4. 任何对类成员的直接访问都被看作this的隐式访问
  5. this是一个常量指针,所以你无法修改this中保存的地址
  6. 定义成员函数,const加在形参列表后面表示this是一个指向常量的指针,这样的函数被成为常量成员函数
  7. 常量对象只能调用常量成员函数
  8. 类外部定义的成员的名字必须包含它所属的类名
  9. 构造函数的名字类名相同,构造函数没有返回类型,可以有多个构造函数,跟重载函数类似
  10. 构造函数不能被声明为const
  11. 类会有一个默认构造函数,编译器只有在没有声明任何构造函数时,才会自动的生成默认构造函数
  12. 如果类内的含有内置类型或者复合类型的成员,只有当这些成员全部被赋予类内的初始值时,这个类才适合使用合成的默认构造函数
  13. 如果定义了其他构造函数,也必须定义默认构造函数
  14. 构造函数初始值列表,可以为新创建的对象的一个或者几个成员赋初始值
  15. struct的默认权限是public,class的默认权限是private
  16. friend友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限。友元不是类的成员也不受他所在区域访问控制级别的约束
  17. 一般来说,最好在类定义开始或结束钱的未知集中声明友元
  18. 友元的声明仅仅指定了访问的权限,所以我们还需要为专门对函数进行一次声明
  19. 可以给成员变量的声明中添加mutable,那么就需要修改该对象的这个变量了,即使这个对象是const对象
  20. 可以使用class Screen;方式进去前向声明,和OC的@class一样,OC应该就是从C++这些搞过去的。
  21. 如果一个类指定了友元类,则友元类的成员函数可以访问此类包括非公有成员在内的所有成员
  22. 每个类负责控制自己的友元类或友元函数
  23. 调用某一个友元类或者友元函数,前提是这个友元已经声明过了,而不单单只是被友元声明了。
  24. 可以用::来强制访问外层作用的名字
  25. 如果没有在构造函数的初始值表中显式地初始化成员,则该成员讲在构造函数体之前执行默认初始化
  26. 成员的初始化顺序与他们在类定义中的出现循序一致
  27. 如果一个构造函数为所有参数都提供了默认实参,则它实际上也定义了默认构造函数
  28. 如果构造函数只接受一个实参,则它实际上定义了转换为此类类型的隐式转换机制,所以这种构造函数被称作转换构造函数
  29. explicit会阻止隐式转换,而且只对一个实参的构造函数有效
  30. 当在类外部定义静态成员时,不能重复static关键字,该关键字只能出现在类内部的声明语句

类这章的东西太细了,为什么C++这么难搞,因为他总是一分再分,把不同情况的类又去做特殊处理了。。什么聚合类呀,字面值常量类,就不能简单一点。

部分文字来自《C++ Primer》