2017-10-11 7 views
1

Je fais un quiz sur une classe de niveau intro en C++ et j'essaie de comprendre une question. Après avoir cherché sur Internet et ne pas avoir de réponse, alors je suis là.Différence entre 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); 

La réponse est C.

Je sais la différence entre: fstream, ofstream, ostream, iostream. Ce que je ne comprends pas, c'est pourquoi aucune des autres options n'est capable d'accepter l'objet cout ou stream en tant qu'argument.

La réponse est-elle aussi simple que les objets ostream contiennent des données (char, etc) qui peuvent être passées en arguments?

Toute information serait grandement appréciée.

+2

Peut-être que [cette référence d'E/S C++] (http://fr.cppreference.com/w/cpp/io) et son diagramme de hiérarchie d'héritage peuvent vous aider? –

+0

Relatif: [Est-il possible de transmettre des classes dérivées en référence à une fonction prenant la classe de base en paramètre] (https://stackoverflow.com/questions/9285627/is-it-possible-to-pass-derived-classes- par-référence-à-une-prise-de-fonction-prise-cl) – Borgleader

+0

Je choisirais 'D' parce qu'un flux de fichier peut être entré et sorti. Réponse 'C' est sorti seulement. –

Répondre

2

La réponse est C. La question concerne la hiérarchie d'héritage. std::cout est une instance de std::ostream. Toutes les autres fonctions acceptent les sous-classes de std :: ostream et ne peuvent donc pas gérer std::cout. std::fstream pourrait être passé à tous, mais la question portait sur les deux.

+1

http://www.cplusplus.com/reference/iolibrary/ cela pourrait aider –