第7章 类

来源:互联网 发布:android 6.0源码编译 编辑:程序博客网 时间:2024/05/28 17:07

1.拷贝构造函数的参数是确定的,不能重载

2.类的基本思想是数据抽象和封装。

数据抽象是一种依赖于接口和实现分离的编程以及设计技术。类的接口包括用户所能执行的操作;类的实现则包括类的数据成员,负责接口实现的函数体以及定义类所需的各种私有函数。

封装实现了类的接口和实现的分离。封装后的类隐藏了它的是实现细节,也就是说,类的用户只能使用接口而无法访问实现部分。

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

4.定义成员函数

尽快所有成员都必须在类的内部声明,但是成员函数体可以定义在类内也可以定义在类外。

5.一般来说,如果非成员函数是类接口的组成部分,则这些函数的声明应该与类在同一个头文件内。

6.构造函数

每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化进程,这些函数叫做构造函数。

构造函数的任务是初始化对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。

构造函数的名字和类名相同。与其他函数不一样的是,构造函数没有返回类型;除此之外类似于其他的函数,构造函数也有一个(可能为空的)参数列表和一个(可能为空的)函数体。类可以包含多个构造函数,和其他重载函数差不多,不同的构造函数必须在参数数量或参数类型上有所区别。

不同于其他成员函数,构造函数不能被声明称const的。当我们创建类的一个const对象时,直到构造函数完成初始化过程,对象才真正取得其常量属性。因此,构造函数在const对象的构造过程中可以向其写值。

如果我们的类没有显式地定义构造函数,那么编译器就会为我们隐式地定义一个默认构造函数。

编译器创建的构造函数又被称为合成的默认构造函数,按照如下规则来初始化类的数据成员:

1.如果存在类内的初始值,用它来初始化成员。

2.否则,默认初始化。

只有在类没有声明任何构造函数时,编译器才会自动地生成默认构造函数。

如果定义在块中的内置类型或复合类型(比如数组和指针)的对象被默认初始化,则它们的值是未定义的。该准则同样适用于默认初始化的内置类型成员。因此,含有内置类型或复合类型的类应该在类的内部初始化这些成员,或者定义一个自己的默认构造函数。否则,用户在创建类的对象时就可能得到未定义的值。

(如果类包含有内置类型或者复合类型的成员,则只有当这些成员全部被赋予了类内的初始值时,这个类才适合于使用合成的默认构造函数)




0 0
原创粉丝点击