2012-04-27 17 views
17

Sto provando a trovare un modo per passare fout o cout a una funzione. Mi rendo conto che ci sono modi logicamente semplici per affrontare questo, come mettere ifs in qualsiasi funzione che emette dati o anche solo scrivere la funzione in entrambi i modi. Tuttavia, sembra primitivo e inefficiente. Non credo che questo codice funzionerebbe mai, lo sto mettendo qui per assicurarmi che sia facile vedere cosa mi piacerebbe fare. Si prega di essere consapevole del fatto che sto prendendo una classe di progettazione algoritmo utilizzando C++, non sono in alcun modo un programmatore C++ esperto. La mia lezione è limitata all'utilizzo delle intestazioni che vedi.È possibile passare il cout o il fout a una funzione?

#include <iostream> 
#include <iomanip> 
#include <fstream> 

using namespace std; 
void helloWorld(char); 
ofstream fout; 

int main() 
{ 
    fout.open("coutfout.dat"); 
    helloWorld(c); 
    helloWorld(f); 

    return 0; 
} 
void helloWorld(char x) 
{ 
    xout << "Hello World"; 
    return; 
} 

risposta

33

Questi sia ereditare da ostream provare quindi questo:

void sayHello(ostream& stream) 
{ 
    stream << "Hello World"; 
    return; 
} 

Quindi, in main, passare l'oggetto (cout o qualsiasi altra cosa) e dovrebbe funzionare correttamente.

+0

Funziona! Sapevo che non poteva essere così difficile come lo stavo facendo. Grazie mille! – ChiefTwoPencils

+3

Nessun problema. Controlla http://en.cppreference.com/w/cpp/io/basic_ostream per la classe base. –

+0

@Kevin Dopo aver letto il link che hai dato, penso che la funzione dovrebbe restituire 'stream' dato come argomento ...' std :: ostream e sayHello (std :: ostream & stream) {return stream << "Hello World";} ' – GingerPlusPlus

12

Sì. Lasciate che la vostra funzione sia

sayhello(std::ostream &os); 

Poi, nella funzione, è possibile utilizzare os al posto di xout.

(. A proposito, using namespace std discariche l'intero namespace std e non è raccomandato un using std::cout e simili è tutto a posto, però.)

+0

Grazie. Ho notato che il formato sembrava essere la convenzione. Quindi, un 'using std :: cout' crea una" scorciatoia "che rende possibile usare' cout', ma lasciando il resto dello spazio dei nomi std in tatto? – ChiefTwoPencils

+0

@RobertoWilko: Esatto. L'uso di 'std :: cout' introduce il nome' cout' nello spazio dei nomi corrente per uso immediato (il che significa anche che non è possibile accedere a una variabile locale chiamata 'cout ', se ce n'era una). – thb