Estoy trabajando en un proyecto de tarea para un rolodex virtual que ha requerido una clase principal, una clase de rolodex y una clase de tarjeta. Para enviar los contenidos de todas las "tarjetas" a la consola, la tarea dice que main() debe llamar a una función show (...) en la clase rolodex, pasándola un ostream y show (...) luego itera sobre las tarjetas, llamando a cada una de sus funciones showCard(). La muestra real se realiza mediante la función showCard() de los objetos de la tarjeta, que se muestra en el ostream proporcionado.C++ Pasando ostream como parámetro
Lo que no entiendo es por qué un ostream debería/debería pasarse a otra parte. Parece que la asignación está llamando a algo como esto:
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;
}
en lugar de algo como esto:
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;
}
Soy yo sea mala interpretación del uso de ostream como un parámetro o falta alguna otra razón obvia para pasar un ostream en la corriente de esa manera?
Para que todos sean iguales, la segunda línea en 'main' necesita desaparecer, y la tercera línea debe ser' myRolodex.show (std :: cout); '. –
Editado para eliminar el objeto ostream en el segundo ejemplo, pero ¿por qué std :: cout aún debe transmitirse a Card :: show()? ¿No puede simplemente usar cout? ¿O tal vez por el mismo te refieres a que ambas versiones pasan un ostream (no solo la misma salida)? – ChrisM
'std :: cout' es un objeto' ostream'. La idea de pasar un 'std :: ostream' es hacerlo de modo que a la función no le importe dónde está enviando el resultado. 'std :: cout' es solo una instancia especial de' std :: ostream'. Si haces que la función use esa instancia de 'std :: ostream', has derrotado el punto del parámetro. –