Trong C++ do tất cả các stream đều được xử lý như nhau, nên một bộ chèn dùng để xuất thông tin ra màn hình có thể dùng để xuất thông tin ra file mà không cần phải thay đổi gì cả.
Đây là một trong những đặc trưng quan trọng và hữu hiệu của cách tiếp cận
nhập/xuất C++.
Các bộ chèn và bộ chiết đã được quá tải, cũng như các bộ thao tác nhập/xuất, có thể
dùng cho bất kỳ một stream nào miễn là các bộ này được viết một cách tổng quát. Do đó cần phải tổng quát hoá các bộ chèn và bộ chiết hay các bộ thao tác nhập/xuất
bất cứ khi nào có thể làm được.
Ví dụ 6.1 Quá tải các toán tử << và toán tử >> trong lớp coord,
có thể dùng chúng để xuất thông tin ra màn hình cũng như ra file.
#include <iostream.h> #include <fstream.h> class coord { int x, y; public: coord(int i, int j) { x = i; y = j; }
friend ostream &operator << (ostream &stream, coord ob); friend istream &operator >> (istream &stream, coord &ob);
};
ostream &operator<<(ostream &stream, coord ob) {
stream << ob.x << ' ' << ob.y << '\n'; return stream;
}
istream &operator>>(istream &stream, coord &ob) {
stream >> ob.x >> ob.y; return stream;
}
int main() {
coord o1(1, 2), o2(3, 4);
ofstream out("test.txt");
if(!out) {
cout << "Cannot open output file.\n"; return 1;
}
out << o1 << o2; // write to test.txt with the contents : 1 2 3 4 out.close();
ifstream in("test.txt");
if(!in) {
cout << "Cannot open input file.\n"; return 1; }
coord o3(0, 0), o4(0, 0);
in >> o3 >> o4; // write to objects o3, o4 with the contents : 1 2 3 4
cout << o3 << o4; // output to monitors : 1 2 3 4
in.close();
return 0; }
Ví dụ 6.2 Các bộ thao tác nhập/xuất có thể dùng để xuất thông tin ra màn hình
cũng như ra file.
#include <fstream.h> #include <iomanip.h> // Attention:
ostream &atn(ostream &stream)
{
stream << "Attention: "; return stream;
}
// Please note:
ostream ¬e(ostream &stream)
{
stream << "Please Note: "; return stream; } int main() { ofstream out("test.txt"); if(!out) {
cout << "Cannot open output file.\n"; return 1;
}
// write to screen
cout << atn << "High voltage circuit\n"; cout << note << "Turn off all lights\n";
// write to file
out << atn << "High voltage circuit\n"; out << note << "Turn off all lights\n";
out.close(); return 0; }
Bài tập VII
1. Với mỗi chương trình trong chương 8, hãy thực hiện các điều chỉnh các bộ chèn, bộ chiết và các bộ thao tác nhập/xuất để chúng có thể làm việc được với các file .