469826336 发表于 2018-12-6 21:58:59

c++中聚合类与类内初始化的问题

本帖最后由 469826336 于 2018-12-6 21:58 编辑

练习8.12:我们为什么没有在PersonInfo中使用类内初始化
答案是:因为我们需要其中的成员皆可被访问,所以是一个聚合类,不能在内部进行初始化。
我想知道为什么声明的info成员在内部初始化就不能被访问了,有大佬解释下吗{:10_298:}
http://m.qpic.cn/psb?/106d61b1-1dac-4fd6-9fb5-b30b0d5b1501/IzGsLwcakJnIxTsw*Hq11GG7q8CvrNx1Xr*PcNQ6c7w!/b/dFMBAAAAAAAA&bo=2gREAgAAAAARB6g!&rf=viewer_4"

翼是孤独 发表于 2018-12-6 22:39:21

首先,聚合类的定义:

翼是孤独 发表于 2018-12-6 22:41:00

聚合类使得用户可以直接访问成员,并且具有特殊的初始化语法形式。当一个类满足如下条件时,我们说它是聚合的:
·所有成员都是public的。
·没有定义任何构造函数。
·没有类内初始值。
·没有基类,也没有virtual函数。
例如,下面的类是一个聚合类:

struct Data{
int ival;
string s;
};

469826336 发表于 2018-12-10 21:02:56

来自csdn博主rye_whiskey的回答:12题,我认为和聚合类没有关系,成员能不能被访问取决于访问修饰符的指示情况,而struct默认都是public的,所以无论有无类内初始化,成员都是可以被访问到的。至于这道题,我觉得不用类内初始化的原因是,string和vector类内有自己的无参构造函数,能够完成初始化的工作,不会让其对象处于未定义的状态。(看来博主看书看到后期是有点累了啊,(^-^))
页: [1]
查看完整版本: c++中聚合类与类内初始化的问题