天天看点

C++primer_第七章_类_学习跟踪

1.        类成员函数的声明必须在类的内部,它的定义既可以在类的内部也可以在类的外部;

2.        定义在类内部的函数是隐式的inline函数

3.        紧跟在参数列表后面的const表示this是一个指向常量的指针;

4.        常量对象,以及常量对象的引用和指针都只能调用常量成员函数;

5.        编译器分两步处理类:首先编译成员函数的声明,然后才轮到成员函数体;

6.        在类外部定义成员函数的成员名字必须包含它所属的类名;

7.        IO类属于不能被拷贝的类型,因此我们只能通过引用来传递它们

8.        如果定义在块中的内置类型或复合类型的对象被默认初始化,则它们的值是未定义的。该准则同样适用于默认初始化的内置类型成员,因此,含有内置类型或复合类型的成员的类应该在类的内部初始化这些成员,或者定义一个自己的默认构造函数;

9.        当某个数据程媛媛被构造函数初始值列表忽略时,它将以与合成默认构造函数相同的方式隐式初始化;

10.    如果编译器不支持类内初始值,则所有构造函数都应该显示地初始化每个内置类型的成员;

11.    当类需要分配类对象之外的资源时,合成版本的拷贝、赋值与销毁操作通常会失效。然而,如果类包含vector或者string成员,则其拷贝、赋值和销毁的合成版本能够正常工作;

12.    类可以允许其他类或者函数访问它的非公有成员,方法是令其它类或函数成为它的友元。如果一个类想把一个函数作为它的友元,只需要在类内增加一条以friend关键字开始的函数声明语句即可;

13.    友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明,必须在友元声明的函数之外再专门对函数进行一次声明;

14.    友元函数通过传入的待访问的类对象的引用以及成员访问运算符“.”访问对象的非公有成员;

15.    类中用来定义类型的成员必须先定义后再使用。因此,类型成员通常出现在类开始的地方;

16.    类的可变数据成员(即用mutable修饰的成员)永远不会是const,即使它是const对象的成员;

17.    当我们提供一个类内初始值时,必须以符号=或者花括号表示;

18.    一个const成员函数如果以引用的形式返回*this,那么他的返回类型将是常量引用;

19.    通过区分成员函数是否是const的,我们可以对其进行重载;

20.    友元函数能定义在类的内部,这样的函数时银式内联的;

21.    如果一个类想把一组重载函数声明成他的友元,它需要对这组函数中的每一个都分别声明;

22.    友元声明的作用是影响访问权限,它本身并非普通意义上的声明;

23.    当成员函数定义在类的外部是,返回类型中使用的名字都位于类的作用域之外。这时,返回类型必须指明它是哪个类的成员;

24.    编译器处理完类中的全部声明后才会处理成员函数的定义,所以成员函数能处理类中的任何名字。但这种处理方式只适用于成员函数中使用的名字。声明中使用的名字,包括返回类型或者参数列表中使用的名字,都必须在使用前确保可见;

25.    类型名的定义通常出现在类的开始处,这样就能确保所有使用该类型的成员都出现在类名的定义之后;

26.    ::表示外层作用域

27.    如果类的成员是const或者引用的话,必须通过构造函数的初始值将其初始化。类似的,当成员属于某种类类型且该类没有定义默认构造函数时,也必须将这个成员初始化。这是因为当构造函数体一开始执行时,初始化就完成了;

28.    构造函数初始值列表中的成员的初始化顺序与他们在类定义中出现的顺序一致,并非按列表中出现的顺序进行初始化的,这一点需要注意;

29.    委托构造函数使用它所属的类的其他构造函数执行它自己的初始化过程,其中参数列表必须与泪痣另外一个构造函数匹配;

30.    能通过一个实参调用的构造函数定义了一条从构造函数的参数类型向类类型隐式转换的规则,同时可以通过将构造函数声明为explicit加以阻止;

31.    只能在类内声明构造函数时使用explicit关键字,在类外部定义时不应该重复;

32.    静态数据成员可以是不完全类型,也就是说静态数据成员的类型可以就是它所属的类类型。

33.    静态成员与普通成员的另一个区别就是我们可以使用静态成员作为默认实参;

34.    必须在类的外部定义和初始化每一个静态成员,然而,可以为静态成员提供const证书类型的类内初始值,不过要求静态成员必须是字面值常量类型的constexpr;

继续阅读