事实上,在我的机器上,最后一句可以打印出4.txt余下的内容。这个事实也间接回答了你第二个问题。是否需要clear() *** 作才能重用流对象取决于可能很多因素,所以有些机器上你不需要clear,有些机器上你必须clear否则会报错。
c++ primer的意思是,如果你想写出优秀的代码,可复用的代码,那么你必须写clear,否则你不知道在谁的机器上这代码可能不能运行。
你可以把你的4.txt的内容贴出来,看看在我机器上运行结果如何
ifstream 输入文件流 input file stream 用于从文件读数据(从文件读入)ofstream 输出文件流 output file stream 用于向文件写数据(输出到文件)
举个例子
#include <iostream>
#include <fstream>
using namespace std
int main()
{
int a = 3, b = 5, c, d
fstream x ("kdjf.dat", ios::out|ios::binary)
if(x.fail())
{
cout <<" open file fail "<<endl
return -1
}
x.write((const char *)&a, sizeof(int))
x.write((const char *)&b, sizeof(int))
x.close()
x.open("kdjf.dat", ios::in)
if(x.fail())
{
cout <<" open file fail "<<endl
return -1
}
x.read((char *)&c, sizeof(int))
x.read((char *)&d, sizeof(int))
x.close()
cout<<c<<endl
cout<<d<<endl
return 0
}
#include <iostream>#include <iomanip>
#include <fstream>
#include <string>
using namespace std
class CMen
{
public:
CMen(string name,string num,int age=0, int salary=0)
voidprint()const//这个函数可以通过将重载流 *** 作符的流变量设为cout来代替
string getStrnum()const//不改变成员的值最好为const成员函数
friend ostream&operator<<( ostream&os, CMen&man )
friend istream&operator>>( istream&is, CMen&man )
private:
string m_name//用标准库的string类型会更好
string m_num//int Strnum
int Age
int Salary
}
CMen::CMen(string name, string num, int age, int salary)
{
m_name = name
m_num = num
Age = age
Salary = salary
}
void CMen::print()const
{
cout <<endl <<"职员信息如下: " <<endl
cout <<"姓名:" <<m_name <<endl
cout <<"工号: " <<m_num <<endl
cout <<"年龄: " <<Age <<endl
cout <<"工资:" <<Salary <<endl
}
string CMen::getStrnum()const
{
return m_num
}
ostream&operator<<(ostream&os, CMen&man )
{
if (!os) return os//检查流状态
os <<man.m_name <<man.m_num <<man.Age <<endl <<man.Salary
return os
}
istream&operator>>(istream&is, CMen&man )
{
if(!is) return is//检查流的状态
is >>man.m_name>>man.m_num >>man.Age >>man.Salary
return is
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)