象这种情况,诸位老大一般是怎么处理的

qhl93281723 2003-07-20 08:18:07
象这种情况,诸位老大一般是怎么处理的:
class X
{
public:
X(ifstream& in_file)
{
……
}
};

class Y //(可以把Y看成MFC中的CDocument类)
{
public:
Y();
……
private:
X x;
};

请问:x必须在初始化列表中进行,但必须先执行:
ifstream in_file(“my_datafile”);而这句又不能放在初始化列表。
诸位是否遇到这种情况,该怎么处理?
谢谢!
...全文
31 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
MatrixCpp 2003-07-20
  • 打赏
  • 举报
回复
第二种感觉舒服些:》



短歌如风 2003-07-20
  • 打赏
  • 举报
回复
你应该为你的Y写一个有参数的构造函数:
classY
{
public:
Y(ifstream& in_file): x(in_file){...}
private:
X x;
};
然后:
ifstream in_file("my_datafile");
Y y(in_file);
或者给Y加一个成员变量:
class Y
{
private:
ifstream in_file;//注意要在x成员前,因为与成员初始化顺序有关。
X x;
public:
Y(const char * in_file_name)//如果文件名是固定不变的也可以有用参数
: in_file(in_file_name), x(in_file){...}
};
然后:
Y y("my_datafile");
关键就在于X要的是一个引用类型,而这个引用必须保证在X的对象生存期间一直有效,方法就是使用静态变量或使用Y的成员变量(我更倾向于后一种方法)。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧