我正在为一个虚拟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