【发布时间】:2011-07-27 08:20:20
【问题描述】:
我正在为一个虚拟 rolodex 做一个家庭作业项目,该项目需要一个主类、一个 rolodex 类和一个卡片类。要将所有“卡片”的内容输出到控制台,分配说 main() 应该调用 rolodex 类中的 show(...) 函数,将其传递给 ostream 和 show(...) 然后迭代在卡片上,调用它们的每个 showCard() 函数。实际显示由卡片对象的 showCard() 函数完成,显示在提供的 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);。 -
在第二个示例中已编辑以删除 ostream 对象,但为什么仍需要将 std::cout 传递给 Card::show()?它不能只使用 cout 吗?或者也许你的意思是两个版本都传递一个ostream(不仅仅是相同的输出)?
-
std::cout是一个ostream对象。传递std::ostream的想法是让函数不关心它在哪里发送输出。std::cout只是std::ostream的一个特殊实例。如果你让函数本身使用std::ostream的一个实例,那么你就失去了参数的意义。
标签: c++ parameter-passing ostream