c++如何用输入输出流存取对象(或对象数组)的数据成员?

suhaiwei1986 2007-01-22 08:18:13
#include<iostream>
#include<string>
#include<fstream>
using namespace std;

class Stu_Info
{
private:
string name;
int age;;
int number;
public:
//
//
void setname(string str){name=str;}
void setage(int ages){age=ages;}
void setnumber(int num){number=num;}
};
int main()
{
Stu_Info *ptr=new Stu_Info;
ptr->setname("lihua");
ptr->setage(18);
ptr->setnumber(310);
ofstream ofile("stuinfo.dat",ios_base::out);
ofile.write((char*)ptr,sizeof(*ptr)); //***************//
ofile.close();
cout<<"信息已经保存!"<<endl;
delete ptr;
}
请问,打*****号那一行符合c++规范吗?
...全文
488 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
suhaiwei1986 2007-01-24
  • 打赏
  • 举报
回复
可以通过编译,但运行时回有问题,不过证实是编译器问题.感谢各位啊,特别是
nette() ,你让我学会使用了重载^_^
suhaiwei1986 2007-01-23
  • 打赏
  • 举报
回复
谢谢各位.可以通过编译,但运行时弹出一个窗口,显示:没有找到MSVCP80D.dll,因为应用程序未能启动,重新安装应用程序可能会修复此问题.

但是我把上边的代码改为动态创建对象数组就完全没有问题,请问为什么会这样?
nette 2007-01-22
  • 打赏
  • 举报
回复
经典做法重载operator<<
friend ostream& operator<<(ostream & os, const Stu_Info& inst)
{
os<<inst.name<<inst.age<<inst.number;
return os;
}
...
ofile<<(*ptr);
jixingzhong 2007-01-22
  • 打赏
  • 举报
回复
将就吧 ···

为什么不直接写:
ofile.write((char*)ptr,sizeof(Stu_Info));

看起来也顺眼点 ~
jixingzhong 2007-01-22
  • 打赏
  • 举报
回复
write 方法,
ms 应该使用 2进制打开并操作文件:

ios::binary
open the file in binary mode
Dong 2007-01-22
  • 打赏
  • 举报
回复
不符合,但应该可以通过运行,如果不可以通过编译,那是编译器检测的问题。

因为: Stu_Info的第一个对象是string,而string是包含着char*的,可以强制获取,也可以通过c_str()获取,好象也上string的对象首地址。所以就可以了

我是没有编译运行的
mochen5460 2007-01-22
  • 打赏
  • 举报
回复
干嘛要这么强制转换呢?总觉得有隐患。

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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