成员初始化列表

来源:互联网 发布:淘宝客垃圾 编辑:程序博客网 时间:2024/06/04 20:12

定义一个类Person:

Class Person{public:    Person():name(NULL){}    Person(const char*str,,const double*pd,int n):name(str),scores(pd,n){}private:    string name;    valarray<double> scores;}


1.对于基本类型数据成员

Derived::Derived(int a):member(a){...}

使用的是派生类数据成员的名称(member)。


2.对于继承对象

Derived::Derived(const Derived& a):Base(a){...}

对于继承的对象,构造函数在成员初始化列表中使用类名来调用特定的基类构造函数。


3.对于成员对象

Person(const char*str,,const double*pd,int n):name(str),scores(pd,n){}

name为Person的string类型成员对象(string类型的一个实例)。因为该构造函数初始化的是成员对象,而不是继承的对象,所以在初始化列表中使用的是成员名(是name而不是string),而不是类名。初始化列表的的每一项都调用与之匹配的构造函数,即name(str)调用构造函数string(const char*),scores(pd,n)调用构造函数valarray<double>(const double *,int)。


C++要求在构建对象的其他部分之前,先构建继承对象的所有成员对象。因此,如果省略初始化列表,C++将使用成员对象所属类的默认构造函数。


当初始化列表包含多个项目时,这些项目初始化的顺序为它们被声明的顺序,而不是它们在初始化列表中的顺序。


原创粉丝点击