C++ 12.4.5 类成员的显示初始化----数据成员都是public类型且没有构造函数的类

尽管大多是对象可以通过运行适当的构造函数进行初始化,但是直接初始化简单的非抽象类的数据任然是可能的。

对于没有定义构造函数并且其全体数据成员均为public的类,可以采用与初始化数组元素相同的方式初始化其成员。

struct Data{
   int ival;
   char *ptr;
//struct类默认是public的,class默认是private的
};
//vall.ival=0,vall.ptr=0
Data vall ={0,0};
////vall.ival=0,vall.ptr=0
Data val2={1024,"anna ;livia plurabelle"}
//根据数据成员的声明次序来使用初始化式(12.4.3)
Data val2={"anna ;livia plurabelle",1024}//这是错误的

显示初始化类类型对象的成员三个缺点:

  • 要求类的全体数据成员都是public

  • 将初始化每个对象的每个成员的负担放在程序员身上,容易出错

  • 如果增加或删除一个成员,必须找到所有的初始化并正确更新。

习题 12.31
pair<int,int>p2={0,42};
//因为pair类定义了构造函数,所以尽管其数据成员为public,也不能采用这种显示初始化方式。只有没有定义构造函数且全体数据成员为public的类,才可以采用与初始化数组元素相同的方式初始化其成员:
pair<int,int>p2(0,42);

参考:《10.1,10.2关联容器—-三种构造函数》
http://blog.csdn.net/hlsdbd1990/article/details/46438003

参考:《 4.1 数组 —-显示的初始化》
http://blog.csdn.net/hlsdbd1990/article/details/45561403

参考:《 12.4.5 类成员的显示初始化》
http://write.blog.csdn.net/mdeditor#!postId=46605673

你可能感兴趣的:(成员初始化)