1.常量成员函数
2. 自引用
3.协助函数
将一个类和他的协助函数定义在一个名字空间内。
4.具体类型的意义
int 和char 等内部类型有时也被称为值类型,而将他们的使用称为面向值的程序设计.这些类型的使用模型以及隐藏着它们设计背后的“哲学”与那种所谓的面向对象程序设计的东西之间存在着很大的差异。
在一个应用中,如果缺乏一批合适的“小而有效的类型”,并因此去使用过分一般且代价昂贵的类,就可能导致严重的时间和空间上的低效率。换一个角度,缺乏具体类型将导致结构模糊的程序和时间上的浪费,因为每个程序员都需要写代码,去之间操作“小儿频繁使用的”数据结构。
5.析构函数
析构函数,它通常完成一些清理和释放资源的工作。例如:当一个自动变量离开它的作用域,当一个位于自由存储的对象被删除时,还有在其他的类似情况,析构函数被隐式的调用。只有在非常特殊的情况下,用户才去显示的调用析构函数。
析构函数的最常见的用途是为释放构造函数请求的存储空间。
6.默认构造函数
默认构造函数就是调用时不必提供参数的构造函数,提供了默认参数的构造函数也是默认构造函数。如:
T(); T(size_t size = 10); 都为默认构造函数。
如果用户自己定义了一个默认构造函数,那么就会去调用它;否则,如果有必要,而且用户没有声明其他的构造函数,编译器就会设法去生成一个。 默认构造函数只能有一个。
由于const和引用必须进行初始化,包含const或引用成员的类聚不能进行默认构造,除非程序员显示的提供默认构造函数。
7. 构造和析构
a. 局部变量:一个命名的自动对象,当程序执行每次遇到它的声明时建立,每次程序离开它所出现的块时销毁。
b.对象的复制
复制构造函数 和 赋值复制
定义赋值操作时,当心自赋值,进行自赋值检查, if(this != &t)判断。
复制构造函数是去完成对未初始化的存储区的初始化,而复制赋值运行符则必须正确处理一个结构良好的对象。
c.自由存储
在自由存储中建立的对象时,有关的构造函数由new调用,这个对象将一直存在直到将delete函数作用域指向它的指针。
8.类对象作为成员
a.为类对象成员提供初始化列表,构造函数的调用顺序与初始化顺序一致,析构与构造相反逐个执行。
如果某个成员的构造函数不需要参数,在初始式列表里无须提到这个成员。
成员初始化的必要性,对于那些const成员和引用成员而言,对成员的初始式都是必不可少的。
有两种方式:初始式 和赋值。
b.成员常量
对那些静态整型成员,可以给它的成员声明加上一个常量表达式作为初始式。
only static const integral data members can be initialized within a class
不要试图在类里用枚举去初始化一个浮点数。
c.成员的复制
可以将复制构造函数和赋值运算符重载声明为private来实现无法对类对象实现复制构造和赋值操作。
在增加一个新的类成员时,总应该去检查,看是不是有用户定义的构造函数需要更新,以便完成对新成员的初始化和复制。
没有评论:
发表评论