2011-10-22 26 views
0

私は多項式のためのC++クラスを実装するための学校プロジェクトに取り組んでいます。私のクラスがすると思われるものは、標準入力から、またはファイルから多項式を読み込んだものです。私は私のfavorite c++ reference siteで次を読むまで、私は>>のオーバーロードについて考えた:C++クラスのグローバル関数getlineのオーバーロード

はistream抽出操作が セパレータとして空白を使用していることに注意してください、したがって、この操作はのみ ストリームから単語を考えることができるものを抽出します。テキストの全行を抽出するには、 はグローバル関数getlineの文字列のオーバーロードを参照してください。

私は多項式クラスのグローバル関数getlineをオーバーロードして、ファイルから行全体を読み込むことができます。ストリーム抽出演算子に過負荷をかける方法を説明するチュートリアルや記事がたくさんありますが、getlineについての詳細は見つかりませんでした。しかし、私はそれを過負荷にする必要がありますか?参照から、これはどのように行われているように見えます。

私が見たオーバーロードされたgetline関数(リンクされたページの最下部など)の中には、「basic_istream」のようなものが返されていることに気付きました。私はちょうどistreamを返すだけで十分ですか? "char_type"はどうですか?チャーは十分でしょうか?

基本的に私には知っておきたいことは、これらのものが過負荷になっているのか、それとも気になるべき細かいディテールがあるのか​​ということです。

これは私が調理してきたヘッダーです:

class Polynomial { 

    public: 
    friend istream& getline(istream& is, Polynomial & poly); 
    friend istream& getline(istream& is, Polynomial & poly, char delim); 

}; 

friend istream& getline(istream& is, Polynomial & poly) { 

    return getline(is, poly, '\n'); 
} 

friend istream& getline(istream& is, Polynomial & poly, char delim) { 
    // read enough tokens to make a term 
    // stop when we get to the delimiter 

    return is; 
} 

感謝を!

+0

目的が目的の名前と一致しない関数を意図的に書くのはなぜですか? –

答えて

3

あなたはまだoperator >>をオーバーロードする必要があります。演算子の実装では、必要な数の「単語」を抽出することができます(係数ごとに1つまたはそれ以上と仮定しています)。 getlineをオーバーロードしようとしないでください。行がPolynomialにならないようにしてください。

+0

しかし、テキストファイルの多項式はn項を持つかもしれません。あなたが終わりに来たことを伝える唯一の方法は区切り文字で行います。 getlineが適切ではないと確信していますか?ありがとう! – Ziggy

+2

あなたの関数の中でgetline *を使うことができます。それはgetl​​ineに名前をつける必要はありません。 –

+0

ああ、私はgetl​​ineをオーバーロードすることをお勧めしますが、getPolynomialと呼ばれる関数内でコールしてください。こういう音は好き。 – Ziggy

関連する問題