C++ Primer第七章-Classes学习笔记

目录 技术

由于最近可能要使用C++,于是想把这个东西捡起来。突然翻到一年前的C++ Primer学习笔记。总共学了一三三部分。笔记记得比较全的就是第七章了。这里把笔记贴出来。

7.1 定义抽象数据类型

  • const 的对象、引用以及指针只能调用const 成员函数。(因为一旦调用非const成员函数,可能会修改const对象,出现error)
  • 不是const的对象、引用以及指针也能调用const成员函数。
  • 成员函数默认都有一个this隐形参数。 this的类型是一个指向非const版本的类的const指针。
  • 编译器先编译各个成员的声明,再编译成员函数的definition。
  • 构造函数不能是const类型的。当我们建立一个const类型的对象的时候,在构造函数完成对象的初始化之前,该对象不承认自己的const属性。
  • 一旦某各类没有自己定义构造函数。该类就会使用所有的合成默认构造函数。这种构造函数在 有in-class initializers的时候,使用in-class initializer 来初始化数据成员。没有的话,就默认初始化数据成员。

7.2 Access control 和封装

  • 对于一个友元函数。同时需要有friend 声明和一个函数声明。通常将这个函数声明放到和该类的同一个头文件中。

7.3 类的一些其他性质

  • 对于类型定义这样的类成员,必须在使用之前就被声明,因此一般出现在类的最开始。
  • 对于mutable的数据成员,在一个const的对象里也不会是const的。另外,const的成员函数也能修改mutable数据成员。
  • 我们可以用const声明来重载类里面的函数。
  • 每个类都定义了一个唯一的类型。即使两个类的所有成员都一样,他俩都不是同一个类型。
  • 对于incomplete type,我们能定义该type的指针或者引用;我们能在函数声明(不能再函数定义里)里使用incomplete type作为return type 或者parameters。
  • 对于一个类,不能有类型为该类的成员,但是可以有只想该类的指针或者对象。
  • 类和非成员函数在被声明为友元的时候,不需要已经被声明。

7.4 Class scope

  • 在一个类里,如果一个成员使用了类外的类型名,那么该类在接下来的定义里不能重新定义该类型名。
  • 成员函数的return type 和 parameter list 中出现的name必须在此之前就已经被declared了。但是函数的body不用这样要求。

7.5 Constructors Revisited

  • 构造函数初始化列表和在构造函数里面使用赋值的方式来初始化成员变量都可以用来初始化成员变量。
  • 但是对于const或者引用类型的成员变量,只能通过初始化列表进行初始化。
  • 通常按成员变量声明的顺序来写构造函数初始化列表同时避免使用某成员变量来初始化另外一个成员变量。
  • vector 的一个实参的构造函数是explicit的,但是string的一个实参的构造函数不是explicit。

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注