首页 > 试题广场 >

定义一个 dog 类,包含体重和年龄两个成员变量及相应的成员

[问答题]

定义一个 dog 类,包含体重和年龄两个成员变量及相应的成员函数,声明 一个实例 dog1,体重为 5,年龄为 10,使用 I/O 流把 dog1 的状态写入磁盘文件, 再声明另一个实例 dog2,通过读文件把 dog1 的状态赋给 dog2。分别使用文本 方式和二进制方式操作文件,看看结果有何不同;再看看磁盘文件的 ASCII 码 有何不同。

推荐

解:以两种方式操作,程序运行结果一样,但磁盘文件的 ASCII 码不同,使用二进制 方式时,磁盘文件的 ASCII 码为 05 00 00 00 0A 00 00 00,使用文本方式时, 磁盘文件的 ASCII 码为 05 00 00 00 0D 0A 00 00 00,这是因为此时系统自动 把 0A 转换为了 0D 0A

#include <fstream.h>
class dog
{
public:
dog(int weight, long days):itsWeight(weight),
itsNumberDaysAlive(days){}
~dog(){}
int GetWeight()const { return itsWeight; }
void SetWeight(int weight) { itsWeight = weight; }
long GetDaysAlive()const { return itsNumberDaysAlive; }
void SetDaysAlive(long days) { itsNumberDaysAlive = days; }
private:
int itsWeight;
long itsNumberDaysAlive;
};
int main() // returns 1 on error
{
char fileName[80];
cout << "Please enter the file name: ";
cin >> fileName;
ofstream fout(fileName);
// ofstream fout(fileName,ios::binary);
if (!fout)
{
cout << "Unable to open " << fileName << " for writing.\n";
return(1);
}
dog Dog1(5,10);
fout.write((char*) &Dog1,sizeof Dog1);
fout.close();
ifstream fin(fileName);
// ifstream fin(fileName,ios::binary);
if (!fin)
{
cout << "Unable to open " << fileName << " for reading.\n";
return(1);
}
dog Dog2(2,2);
cout << "Dog2 weight: " << Dog2.GetWeight() << endl;
cout << "Dog2 days: " << Dog2.GetDaysAlive() << endl;
fin.read((char*) &Dog2, sizeof Dog2);
cout << "Dog2 weight: " << Dog2.GetWeight() << endl;
cout << "Dog2 days: " << Dog2.GetDaysAlive() << endl;
fin.close();
return 0;
}

程序运行输出:

Please enter the file name: a

Dog2 weight: 2

Dog2 days: 2

Dog2 weight: 5

Dog2 days: 10



发表于 2018-04-18 20:31:01 回复(0)