2017-10-11 203 views
1

我正在C++的一个介绍级别课程上进行测验,我试图理解一个问题。在搜索了互联网并没有得到答案之后,我就在这里。fstream,ofstream,ostream,iostream之间的差异

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等)一样简单吗?

任何信息将不胜感激。

+2

也许[此C++ I/O参考](http://en.cppreference.com/w/cpp/io)及其继承层次结构图可以提供帮助吗? –

+0

相关:[是否可以通过引用派生类来传递函数以基类作为参数](https://stackoverflow.com/questions/9285627/is-it-possible-to-pass-derived-classes- by-reference-to-a-function-taking-base-cl) – Borgleader

+0

我会选择'D',因为可以输入和输出文件流。答案'C'只是输出。 –

回答

2

答案是C.问题是关于继承层次结构。 std::coutstd::ostream的一个实例。所有其他函数接受std :: ostream的子类,因此不能处理std::coutstd::fstream可以传递给他们所有人,但问题是关于两者。

+1

http://www.cplusplus.com/reference/iolibrary/这可以帮助 –