ofs.close();
}
该程序运行后,将在当前工作目录下创建文件Data2.dat,该文件中的数据为:
abcdefghijklmn
abcdefg
abc
【例91.8】二进制文件读/写示例。
要求:
(1)设计一个包括姓名、学号和成绩的学生类。
(2)程序中先把1个学生数据写入文件aaa.dat中,再从文件中读出该学生数据并显示在屏幕上。
程序设计如下:
//Exam9-8.cpp
#include
#include
classStudent//学生类
{
public:
charname[20];//姓名
longnumber;//学号
intscore;//成绩
Student(char*na="0",longnu=0,intsc=0)//构造函数
{
strcpy(name,na);
number=nu;
score=sc;
}
};
voidmain(void)
{
Studentstu1("张三",111,100),stu2;//定义对象
charfileName[]="aaa.dat";
ofstreamfileOut(fileName,ios:
:
binary);//打开二进制输出文件
fileOut.write((char*)&stu1,sizeof(classStudent));//写文件
fileOut.close();//关闭文件
ifstreamfileIn(fileName,ios:
:
binary);//打开二进制输入文件
fileIn.read((char*)&stu2,sizeof(classStudent));//读文件
fileIn.close();//关闭文件
cout<<"姓名:
"<cout<<"学号:
"<cout<<"成绩:
"<}
程序运行后文件aaa.dat中永久保存了一个学生对象的数据,并且屏幕输出如下:
姓名:
张三
学号:
111
成绩:
100
【例91.9】
随机访问文件示例。
要求:
(1)设计一个包括姓名、学号和成绩的学生结构体。
(2)程序中先把3个学生数据写入文件bbb.dat中,再从文件中读出第2个学生的数据显示在屏幕上。
程序设计如下:
//Exam9-9.cpp
#include
structStudent//学生结构体
{
charname[20];//姓名
longnumber;//学号
intscore;//成绩
};
voidmain(void)
{
Studentstu[3]={{"张三",111,100},{"李四",222,90},
{"王五",333,80}},stu2;
charfileName[]="bbb.dat";
intn=3,i;
//打开输入输出文件
fstreamdatafile(fileName,ios:
:
in|ios:
:
out|ios:
:
binary);
//在文件中写入3条纪录
for(i=0;idatafile.write((char*)&stu[i],sizeof(structStudent));
datafile.seekp(1*sizeof(structStudent),ios:
:
beg);
//指针定位到第2条纪录
datafile.read((char*)&stu2,sizeof(structStudent));//读文件
datafile.close();//关闭文件
cout<<"姓名:
"<cout<<"学号:
"<cout<<"成绩:
"<}
程序运行后文件bbb.dat中永久保存了三个学生的数据,并且屏幕输出如下:
姓名:
李四
学号:
222
成绩:
90
【例91.10】
把复数类设计为可流复数类。
要求:
(1)复数的实部和虚部均设计为模板T。
(2)复数运算仅有加,把复数加运算重载为运算符。
(3)重载输入运算符和输出运算符。
(4)对所设计的可流复数类进行测试。
程序设计如下:
//Exam9-10.cpp
#include
template
classComplex
{
friendostream&operator<<(ostream&os,Complex&com);
friendistream&operator>>(istream&is,Complex&com);
private:
Treal;
Timage;
public:
Complex(void):
real(0),image(0)
{};
Complex(Trp,Tip):
real(rp),image(ip)
{};
~Complex()
{};
Complexoperator+(constComplex&x)const
{
returnComplex(real+x.real,image+x.image);
}
};
template
ostream&operator<<(ostream&os,Complex&com)
{
os<<"("<returnos;
}
template
istream&operator>>(istream&is,Complex&com)
{
cout<<"real=";
is>>com.real;
cout<<"image=";
is>>com.image;
returnis;
}
voidmain(void)
{
Complexa(3,5),b(2,3),c,d;
c=a+b;
cout<<"c="<cin>>d;
cout<<"d="<}
程序的一次运行结果如下:
c=(5,8)
real=4
image=8
d=(4,8)