2011-11-11 11 views
0

私は、従業員のタイプが正しく読み込まれるようにEmployeeクラスに>>をオーバーロードする必要があるプログラムを用意しています。私のメインプログラムに:派生クラスの>>演算子を上書きする

Employee *emp; 
empIn >> emp; 

私はそれをしたいと思う場所、それが派生クラスのすべてに適用されるだけであるため、基底クラスは、ある考え出し。

istream &operator >> (istream &stream, Employee &emp) 
{ 
    int type; 
    stream >> type; 
    switch(type){ 
     case 1: 
     *emp = new Hourly; 
     break; 
      ... 
    } 
    return stream; 
} 

しかし、それはしていません:型が、私はこのような何かがうまくいくかもしれないことを考え出しので(私はそれを読むまで、私は種類を知らないと)行の先頭に整数によって決定されます作業。私はこれについて正しい方向に行くつもりですか?もしそうでなければ、正しい方向に向かわせてください。

+1

「それはありません」と言ったらどういう意味ですか? – Maxpm

+1

これは 'Employee *&emp'であるべきです –

+0

それは動作しません、それはコンパイルされません –

答えて

1

例のようにポインタに割り当てることができるようにするには、istream関数の2番目の引数はEmployee* &empである必要があります。この型はポインタへの参照になります。これにより、メソッドの代わりにポインタを割り当てることができます。

2

問題は、参照とポインタを混在させているようです。 operator>>関数では、参照としてempが返されますが、ポインタとしてアクセスすると間違っています。

すべての機能を使用するには、empオブジェクトをに割り当ててからに入力する必要があります。それを関数内に割り当てることはできません。

Employe emp; 
empIn >> emp; 

それとも

Employe *emp = new Employe; 
empIn >> *emp; 

そしてもちろん、関数内newを使用しないでください。

コンパイラは、これに非常に多くのエラーを与えているはずです。最初に何を言っているのかチェックしてください。

+0

私はエラーをチェックしましたが、それは '='演算子がこれらのオペランドにマッチしないということでした。私がEmployee * emp = new Employeeをしなかった理由は、私たちの教授が与えた.hファイルがそれを防止する純粋な仮想関数を持っているからです。したがって、派生クラスの1つのインスタンスを作成できるように、オーバーロードする必要があります。 –

関連する問題