Chr*_*isM 9 c++ parameter-passing ostream
我正在为虚拟rolodex做一个家庭作业项目,该项目已经调用了一个主类,一个rolodex类和一个卡类.要将所有"卡"的内容输出到控制台,赋值表示main()应该在rolodex类中调用show(...)函数,并将其传递给ostream并显示(...)然后迭代通过卡片,调用每个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;
}
Run Code Online (Sandbox Code Playgroud)
而不是像这样的东西:
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;
}
Run Code Online (Sandbox Code Playgroud)
我是误解了使用ostream作为参数还是错过了一些其他明显的理由将流pass传递到流中?
Bil*_*eal 13
我不明白为什么ostream应该/应该通过任何地方.
这通常用于测试等事情.假设你想要正常的控制台输出,所以你要传递一个引用std::cout.但有时您想要进行测试,例如单元测试或验收测试,并且您希望将输出存储在内存中.您可以使用std::stringstream此功能,而您正在使用的功能并不明智.
这是一个特定的情况 - 但通常在任何你想要改变数据源或接收器可能来自/去往的地方,你可以通过传递流来做到这一点.
例如,以下内容将您的rolodex打印到控制台:
int main()
{
Rolodex myRolodex;
myRolodex.show(std::cout);
}
Run Code Online (Sandbox Code Playgroud)
...但是如果明天你想要写一个文件,你可以这样做而不会影响Rolodex中的代码:
int main()
{
Rolodex myRolodex;
std::ofstream file("This\\Is\\The\\Path\\To\\The\\File.txt");
myRolodex.show(file); // Outputs the result to the file,
// rather than to the console.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29770 次 |
| 最近记录: |