class data{
private:
int day,year,month;
public:
data(){}
void DATA(int a,int b,int c){year=a;month=b;day=c;}
data get(){return *this;}
int getday(){return day;}
int getmonth(){return month;}
int getyear(){return year;}
};
class person:public data{
private:
person* next;
char name[15],hobby[15],sex[7],major[13];
int num,money,score;
public:
person(){}
int& getscore(){return score;}
int& getmoney(){return money;}
void PERSON(int,int,int,char[15],char[15],char[7],char[13],int,person*,int,int);
void PERSON2(int,int,int,char[15],char[15],char[7],char[13],int,int,int);
person get(){return *this;}
char* getname(){return name;}
char* gethobby(){return hobby;}
char* getsex(){return sex;}
char* getmajor(){return major;}
int getnum(){return num;}
person*& getnext(){return next;}
};
这个是我定义的类,原来char数组都是string,听人说写入文件不能用指针,就改成char数组了,怎么把这个类构成的链表写进文件?最好来个代码。c++的
还有怎么读出
C++怎么把链表写入文件?
答案:2 悬赏:50 手机版
解决时间 2021-03-11 18:27
- 提问者网友:喧嚣尘世
- 2021-03-11 06:06
最佳答案
- 五星知识达人网友:鱼忧
- 2021-03-11 07:24
从两方面考虑
楼主你知道用string无法写文件,却不深究为啥用string不行,实在不是做学问之道
用string不行是因为他是动态分配的内存 所以内部存储的是地址,但是其实使用例如
c_str() data()等函数还是可以写的 ,并且在C++的类上层 fstream都已经可以实现string的判断
你要写文件有两种方式,但是都建议你封装在类内,成为类内函数(友元或者成员)
方式一
c语言方式(成员较好)
#include
FILE fd=fopen("fname","wrb-mode");//fname 代表文件名 wrb-mode 代表模式 写的话是"r" "r+"
if(!fd)
exit(0);
//之后用fwrite()或者fprintf()来写文件
//着两个函数原型都能百度得到
fclose(fd);
方式二
C++ (友元函数)
friend ostream& operator<<(ostream &o,const person &p)
{
o<
}
//因为是写文件 所以你在使用这个函数符重载的时候 需要创建fstream类或者ostream类
ostream out("fname","mode");//fname是文件名 mode是模式 都是以ios_base::开头的 自己可以百度查看 不例举 写是 ios_base::out
if(!out.is_open())
exit(0);
person p;
out< out.close();
楼主你知道用string无法写文件,却不深究为啥用string不行,实在不是做学问之道
用string不行是因为他是动态分配的内存 所以内部存储的是地址,但是其实使用例如
c_str() data()等函数还是可以写的 ,并且在C++的类上层 fstream都已经可以实现string的判断
你要写文件有两种方式,但是都建议你封装在类内,成为类内函数(友元或者成员)
方式一
c语言方式(成员较好)
#include
FILE fd=fopen("fname","wrb-mode");//fname 代表文件名 wrb-mode 代表模式 写的话是"r" "r+"
if(!fd)
exit(0);
//之后用fwrite()或者fprintf()来写文件
//着两个函数原型都能百度得到
fclose(fd);
方式二
C++ (友元函数)
friend ostream& operator<<(ostream &o,const person &p)
{
o<
}
//因为是写文件 所以你在使用这个函数符重载的时候 需要创建fstream类或者ostream类
ostream out("fname","mode");//fname是文件名 mode是模式 都是以ios_base::开头的 自己可以百度查看 不例举 写是 ios_base::out
if(!out.is_open())
exit(0);
person p;
out< out.close();
全部回答
- 1楼网友:摆渡翁
- 2021-03-11 08:30
不知道
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯