1
sales_iter::sales_iter(const string &book):
isbn(book),units_sold(0),revenue(0.0){}//使用构造函数初始化列表进行元素的初始化
2
sales_iter::sales_iter(const string &book)
{
isbn=book;
units_sold=0;
revenue=0.0;
}//在构造函数内对元素进行赋值
构造函数分两个阶段执行 1 初始化阶段 2 普通的计算阶段
第二个构造函数没有显示初始化,只是进行赋值,在进行赋值之前,元素已经有值,是调用的元素的默认构造函数进行的隐式初始化。有两种情况下必须初始化而不是赋值,一是const类型 二是引用,在开始执行构造函数之前就必须完成初始化。
注意
初始化const或者引用的唯一机会就是在构造函数的初始化列表中。
3 成员初始化的顺序是定义成员的次序,不是参数化列表中所指定的顺序。
4 只有当一个类没有定义构造函数时,编译器才会自动生成一个默认的构造函数。
5 友元机制允许一个类将对其非共有成员的访问权授予指定的函数或者类,友元的声明以关键字friend开始,他只能出现在类定义的内部。
6 static 数据成员必须在类定义体的外部定义(正好一次)
7 复制构造函数是一种特殊的构造函数,具有单个形参,该形参是对该类类型的引用,当定义一个新对象并且用一个同类型的对象对他进行初始化时,将显式使用赋值构造函数,一般用const修饰。合成复制构造函数是编译器提供的默认的复制构造函数,其行为是逐个成员初始化,将新成员初始化为原对象的副本。
8 如果类要防止被复制,那么类必须显示声明其复制构造函数为private
9 对于类的赋值操作符,和复制构造函数一样,如果类没有定义,则编译器提供一个。
10 为了管理具有指针成员的类,必须定义三个复制控制成员:复制构造函数,赋值操作符,和析构函数