使用fstream代替iostream&
我們可以在需要原始類型的對象的地方使用繼承類型的對象拜效。這一事實意味著可以代表相應(yīng)的fstream
(或sstream
)類型調(diào)用被編寫以獲取其中一個iostream類型的引用(或指針)的函數(shù)滞伟。如果我們調(diào)用一個參數(shù)為ostream&
函數(shù)赋咽,我們可以給該函數(shù)傳遞一個ofstream
對象哺徊。istream&
和ifstream
之間也有類似的關(guān)系。
例如我們使用read
和print
函數(shù)來讀取和寫入命名文件恐仑。在這個例子中腺怯,我們假設(shè)輸入和輸出文件的名稱作為參數(shù)傳遞給了main
函數(shù):
Code:
ifstream input(argv[1]); // open the file of sales transactions
ofstream output(argv[2]); // open the output file
Sales_data total; // variable to hold the running sum
if (read(input, total)) { // read the first transaction
Sales_data trans; // variable to hold data for the next transaction
while(read(input, trans)) { // read the remaining transactions
if (total.isbn() == trans.isbn()) // check isbns
total.combine(trans); // update the running total
else {
print(output, total) << endl; // print the results
total = trans; // process the next book
}
}
print(output, total) << endl; // print the last transaction
} else // there was no input
cerr << "No data?!" << endl;
上述代碼中泳赋,read
和print
函數(shù)定義的參數(shù)分別為istream&
和ostream&
。但是我們可以將fstream
對象傳遞給這些函數(shù)
參考文獻
[1] Lippman S B , Josée Lajoie, Moo B E . C++ Primer (5th Edition)[J]. 2013.