fstream、ofstream、ostream和iostream之间的区别是什么?

8

我正在参加一门C++入门级别的课程测验,我试图理解一个问题。在搜索了互联网并没有得到答案后,我来到这里。

Which of the following function declarations will accept either cout or a file stream 
object as its argument?

A. void output( fstream &outFile);  
B. void output( ofstream &outFile); 
C. void output( ostream &outFile);  
D. void output( iostream &outFile);

答案是C。
我知道 fstream、ofstream、ostream 和 iostream 之间的差异。
我不明白的是为什么其他选项都不能将 cout 或文件流对象作为参数接受。
答案是否简单地在于 ostream 对象包含能够作为参数传递的数据(char 等)?
非常感谢任何信息。

7
也许这个 C++ I/O 参考页面及其继承层次结构图能对你有所帮助? - Some programmer dude
1
我会选择D,因为文件流可以进行输入和输出。答案C只能进行输出。 - Thomas Matthews
2
@ThomasMatthews:D不起作用,因为您无法将std::cout传递给它;它不是一个std::istream - Cornstalks
如果我有一个用于读取的ifstream,它是一个文件流,我不能使用C。这个问题应该重新表述。 :-) - Thomas Matthews
@ThomasMatthews 这个函数叫做output。如果它从文件中读取内容,那会有多令人困惑呢? - Borgleader
1个回答

6
答案是C。这个问题涉及到继承层次结构。std::coutstd::ostream的实例。所有其他函数接受std::ostream的子类,因此无法处理std::cout。可以将std::fstream传递给它们中的所有函数,但问题涉及到两者都需要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接