• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
CharlesNels
博客园    首页    新随笔    联系   管理    订阅  订阅

聚合类

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

struct Data{
int ival;
string s;
};

我们可以提供一个花括号括起来的成员初始值列表,并用它初始化聚合类的数据成员:

//val1.ival=0;val1.s=string("Anna")
Data val1={0,"Anna"};

初始值的顺序必须与声明的顺序一致,也就是说,第一个成员的初始值要放在第一个,然后是第二个,以此类推。下面的例子是错误的:

//错误:不能使用"Anna"初始化val1,也不能使用1024初始化s
Data val2={"Anna",1024};

与初始化数组元素的规则一样,如果初始值列表中的元素个数少于类的成员数量,则靠后的成员被值初始化。初始值列表的元素个数绝对不能超过类的成员数量。
值得注意的是,显式地初始化类的对象的成员存在三个明显的缺点:
·要求类的所有成员都是public的。
·将正确初始化每个对象的每个成员的重任交给了类的用户(而非类的作者)。因为用户很容易忘掉某个初始值,或者提供一个不恰当的初始值,所以这样的初始化过程冗长乏味且容易出错。
·添加或删除一个成员之后,所有的初始化语句都需要更新。

posted @ 2018-08-29 17:32  CharlesNels  阅读(1759)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3