2012-04-27 8 views
17

私はfoutまたはcoutを関数に渡す方法を見つけようとしています。私は、これを処理する論理的に簡単な方法があることを認識しています。データを出力する関数にifを入れたり、関数を両方の方法で書くだけでよいのです。しかし、それは原始的で非効率的なようです。私はこのコードがこれまでどおりに動作するとは思っていませんが、私が "好きな"ものを見やすくするためにここに入れています。私はC + +を使用してアルゴリズム設計クラスを取っていることに注意してください。私は決して熟練したC++プログラマーではありません。私のクラスはあなたが見ているヘッダーを使うことに限られています。coutまたはfoutを関数に渡すことはできますか?

#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; 
} 

答えて

33

これらの両方ostreamを継承するので、この方法を試してください。

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

次に、メインでは、オブジェクト(coutなど)を渡すと正常に動作するはずです。

+0

それは動作します!私はそれを作っていたほど難しいとは思っていませんでした。本当にありがとう! – ChiefTwoPencils

+3

問題ありません。基本クラスについてはhttp://en.cppreference.com/w/cpp/io/basic_ostreamをご覧ください。 –

+0

@Kevinあなたが与えたリンクを読んだ後、関数は引数として与えられた 'stream'を返すべきだと思います...' std :: ostream&sayHello(std :: ostream&stream){return stream << "Hello World";} ' – GingerPlusPlus

12

はい。関数の中で、あなたがxoutの代わりにos使用することができ、あなたの関数は、次に

sayhello(std::ostream &os); 

とします。

は(全体std名前空間をダンプし、推奨されていない using namespace stdところで、 using std::coutなどしかし、すべての権利です。)

+0

ありがとうございました。私はその形式がコンベンションであるように見えました。だから、 'std :: cout'を使って' cout'を使うことを可能にする "ショートカット"を作成しますが、残りのstd名前空間はそのままにしておきますか? – ChiefTwoPencils

+0

@RobertoWilko:そうです。 'using std :: cout'は、現在の名前空間に' cout'という名前を導入して即座に使用できるようにします(つまり、 'cout'という名前のローカル変数にアクセスすることはできません)。 – thb

関連する問題