我正在爲一個虛擬rolodex做一個家庭作業項目,這個項目需要一個主類,一個rolodex類和一個卡類。爲了將所有「卡片」的內容輸出到控制檯,分配表明main()應該在rolodex類中調用一個show(...)函數,傳遞一個ostream並顯示(...)然後迭代調用每個showCard()函數。實際顯示是通過卡對象的showCard()函數完成的,顯示在提供的ostream上。C++將ostream作爲參數傳遞
我不明白的是爲什麼ostream會/應該被傳遞到任何地方。好像分配要求是這樣的:
main() {
Rolodex myRolodex;
ostream myStream;
myRolodex.show(myStream);
}
void Rolodex::show(ostream& theStream) {
//for each card 'i' in the Rolodex...
myCard[i].show(theStream);
}
void Card::show(ostream& theStream) {
theStream << "output some stuff" << endl;
}
,而不是像這樣:
main() {
Rolodex myRolodex;
myRolodex.show(); //no ostream passed
}
void Rolodex::show() {
//for each card 'i' in the Rolodex...
myCard[i].show();//no ostream passed
}
void Card::show() {
cout << "output some stuff" << endl;
}
難道我要麼誤解了使用的ostream作爲參數或缺少其他一些明顯的理由來傳遞像這樣的流下一個ostream?
對於那些相同的,'main'中的第二行需要消失,第三行需要'myRolodex.show(std :: cout);'。 – 2011-04-01 00:30:22
編輯刪除第二個示例中的ostream對象,但爲什麼仍然需要將std :: cout傳遞給Card :: show()?難道它只是使用cout?或者也許同樣你的意思是兩個版本都傳遞一個ostream(不只是相同的輸出)? – ChrisM 2011-04-01 00:38:21
'std :: cout'是一個'ostream'對象。傳遞'std :: ostream'的想法是讓函數不關心它發送輸出的位置。 'std :: cout'只是一個'std :: ostream'的特殊實例。如果你使這個函數本身使用'std :: ostream'的一個實例,你已經擊敗了參數的這一點。 – 2011-04-01 02:45:46