近日读林锐的《高质量C++编程》,作如下学习笔记。
(一)每个类只有一个析构函数和赋值函数,却可以有多个构造函数。
(二)C++编译器会为每个类添加一个无参构造函数,析构函数,赋值函数,拷贝构造函数。
(三)缺省的拷贝函数,和赋值函数采用位拷贝的方式,而不是值拷贝。类中含有指针变量时容易出错。
(四)构造函数的初始化表。必须在派生类的初始化表中调用基类的构造函数,类中const常量也必须在类的初始化列表赋值,类成员的初始化可以在初始化表或者函数体内赋值的方式,这两种方式的效率不完全相同。
(五)构造从类的最根出开始,先调用基类的构造函数,然后调用成员对象的构造函数。析构的顺序与之相反。成员变量的初始化顺序又定义的顺序决定,而不是在初始化列表的顺序决定的。
(六)拷贝构造函数在对象创建时调用,赋值函数只能被已经存在的对象条用。 赋值函数中必须检查是否自赋值。注意不要把
if(this == &other)
写成 (*this == other)
自己不想写这两个函数,又不让别人调用,可以把它们声明为private。
(七)编写派生类的赋值函数,不要忘记对基类的成员重新赋值。Base::Operate= (other)