第七章 类

  1. 类的用户和类的设计者常常是同一个人。尽管如此,还是最好把角色区分开来。当我们设计类的接口时,应该考虑如何才能使得类易于使用;而当我们使用类时,不应该顾及类的实现机理。
  2. 作为一个设计良好的类,既要有直观且易于使用的接口,也必须具备高效的实现过程。
  3. 一般来说,如果非成员函数是类接口的组成部分,则这些函数的声明应该与类在同一个头文件内。
  4. 因为IO类属于不能被拷贝的类型,因此我们只能通过引用来传递它们。而且,因为读取和写入的操作会改变流的内容,所以函数接受的都是普通引用,而非对常量的引用。
  5. struct 和 class 的唯一一点区别是,他们的默认访问权限不一样。struct 默认是 public 的,而 class 默认是 private 的。
  6. 最好在类定义开始或结束前的位置集中声明友元。
  7. 一个 const 成员函数如果以引用的形式返回 * this ,那么它的返回类型将是常量引用。
  8. 我们必须首先完成类的定义,然后编译器才能知道存储该数据成员需要多少空间。因为只有当类全部完成之后才算被定义,所以一个类的成员类型不能是自己。然而,一旦一个类的名字出现后,它就被认为是声明过了(但未定义),因此类允许包含指向它自身类型的引用或指针。
  9. 编译器处理完类中的全部声明后才会处理成员函数的定义。
  10. 有时我们可以忽略数据成员初始化和赋值之间的差异,但并非总能这样。如果成员是 const 或者是引用的话,必须将其初始化。类似的,当成员属于某种类类型且该类没有定义默认构造函数时,也必须将这个成员初始化。
  11. 在很多类中,初始化和赋值的区别事关底层效率问题:前者直接初始化数据成员,后者则先初始化再赋值。除了效率问题外更重要的是,一些数据成员必须被初始化。
  12. 成员的初始化顺序与它们在类定义中的出现顺序一致。最好令构造函数初始值的顺序与成员声明的顺序保持一致。而且如果可能的话,尽量避免使用某些成员初始化其他成员。
  13. 如果一个构造函数为所有参数都提供了默认实参,则它实际上也定义了默认构造函数。
  14. 静态成员函数不能声明成 const 的,而且我们也不能再 static 函数体内使用 this 指针。当在类的外部定义静态成员时,不能重复 static 关键字,该关键字只出现在类内部的声明语句。
  15. 一般来说,我们不能在类的内部初始化静态成员。相反的,必须在类的外部定义和初始化每个静态成员。
  16. 即使一个常量静态数据成员在类内部被初始化了,通常情况下也应该在类的外部定义一下该成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值