【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:[email protected]】
7.1 定义抽象数据类型
1.类的基本思想是数据抽象和封装,数据抽象是一种依赖于接口和实现分离的编程(以及设计)技术。类的接口包括用户所能执行的操作:类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。
2.成员函数通过一个名为this的额外隐式参数来访问调用它的那个对象。当我们调用一个成员函数时,用请求该函数的对象地址初始化this。
3.C++允许把const关键字放在成员函数的参数列表之后,此时,紧跟在参数列表后面的const表示this是一个指向常量的指针。像这样使用const的成员函数被称作常量成员函数。
4.每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数。构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。
5.如果我们的类没有显式的定义构造函数,那么编译器回味我们隐式的定义一个默认构造函数。编译器创建的构造函数又被称为合成的默认构造函数。对于大多数类来说,这个合成的默认构造函数将按照如下规则初始化类的数据成员:
⑴如果存在类的初始值,用它来初始化成员
⑵否则,默认初始化该成员
6.在C++11新标准中,如果我们需要默认的行为,那么可以通过在参数列表后面写上=default来要求编译器生成构造函数。其中=default 既可以和声明一起出现在类的内部,也可以作为定义出现在类的外部。和其他函数一样,如果=default在类的内部,则默认构造函数是内联的;如果它在类的外部,则该成员默认情况下不是内联的。
7.2 访问控制与封装
1.在C++语言中,我们使用访问说明符加强类的封装性:
⑴定义在public说明符之后的成员在整个程序内可悲访问,public成员定义类的接口
⑵定义在private说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private部分封装了类的实现细节。
2.类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或者函数成为它的友元。如果类想把一个函数作为它的友元,只需要增加一条以friend关键字开始的函数声明语句即可。
7.3 类的其他特性
1.mutable修饰一个可变数据成员,永远不会是const,即使它是const对象的成员。因此,一个const成员函数可以改变一个可变成员的值。
2.一个const成员函数如果以引用的形式返回*this,那么它的返回类型将是常量引用。
7.4 类的作用域
1.名字查找的过程:
⑴首先,在名字所在的块中寻找其声明语句,只考虑在名字的使用之前出现的声明
⑵如果没有找到,继续查找外层作用域
⑶如果最终没有找到匹配的声明,则程序报错
2.类的定义分两步处理
⑴首先,编译成员的声明
⑵直到类全部可见后才编译函数体
3.成员函数中使用的名字按照如下方式解析
⑴首先,在成员函数内查找该名字的声明。和前面一样,只有在函数使用之前出现的声明才被考虑。
⑵如果在成员函数内没有找到,则在类内继续查找,这时类的所有成员都可以被考虑。
⑶如果内类也没有找到该名字的声明,在成员函数定义之前的作用域内继续查找。
7.5 构造函数再探