Перезавантаження << та >> для файлів
Програма 26.15 продемонструє, як перезавантажуються оператори << та >> в класі Distance для роботи з файловим вводом/виводом.
#include<fstream>
#include<iostream>
#include<conio>
using namespace std;
class Distance
{private:
int feet;
float inches;
public:
Distance():feet(0),inches(0.0)
{ }
Distance(int ft,float in):feet(ft),inches(in)
{ }
friend istream& operator>>(istream& s,Distance& d);
friend ostream& operator<<(ostream& s,Distance& d);
};
////////////////
istream& operator>>(istream& s,Distance& d)
//одержати дані з файлу чи клавіатури
{char dummy;
s>>d.feet>>dummy>>dummy>>d.inches>>dummy;
return s;
}
//////////////
ostream& operator<<(ostream& s,Distance& d)
{s<<d.feet<<"\'-"<<d.inches<<'\"';
return s;
}
///////////////
int main()
{char ch;
Distance dist1;
ofstream ofile; //створити і відкрити
ofile.open("DIST.DAT"); //вихідний потік
do
{cout<<"\nVvedit vidstan: ";
cin>>dist1; //одержати дані від користувача
ofile<<dist1; //записати їх у вихідний потік
cout<<"Continue? (y/n)";
cin>>ch;
}while(ch!='n');
ofile.close(); //закрити вихідний потік
ifstream ifile; //створити і відкрити
ifile.open("DIST.DAT"); //вхідний потік
cout<<"\nVmist failu\n";
while(true)
{ ifile>>dist1; //читання даних з потоку
if(ifile.eof()) //вихід по eof
break;
cout<<"Vidstan="<<dist1<<endl;
};
getch();
return 0;
}
Програма 26.15
У перезавантажені операції ми ввели лише мінімальні зміни. Оператор >> більше не просить ввести вхідні дані, оскільки розуміє, що просити про щось файл безсенсовно. Ми передбачаємо, що користувач знає, як точно вводити значення футів та дюймів, включаючи знаки пунктуації. Оператор << залишився без змін. Програма запитує у користувача вхідні дані і після одержання кожного значення записує його в файл. Коли користувач закінчує ввід даних, програма читає з файлу і виводить на екран всі дані, які там зберігаються.
Якщо користувач помилиться при вводі даних, вони не будуть записані коректно в файл і не зможуть бути прочитані оператором <<. В реальній програмі необхідно перевірити, чи правильно відбувся ввід.
Дата добавления: 2015-08-26; просмотров: 575;