2012-03-11 1 views
1

だから私はBaseクラスがあります。基本抽象クラスでオーバーロードされた演算子をどのように呼び出す必要がありますか?

class Base 
{ 
public: 
    std::ostream& operator << (std::ostream & out, const Base & base); 
} 

をそして、私は、オペレータが何をすべきかを定義している:

ostream& operator << (std::ostream & out, const Base & base) 
{ 
    return out << "output"; 
} 

私はBaseを拡張Derivedクラスを持っていると私はDerivedが同じことをやりたい場合その挿入演算子が呼び出されたときにBaseというものがありますが、これを行う最善の方法は何ですか?そして、最善の方法では、コードを再利用しないことをお勧めします。

+0

'仮想 'メソッドを試しましたか?'派生'が 'Base'とは​​異なる振る舞いをする場合にのみオーバーライドされますか? – moshbear

+3

演算子の宣言が無効です。 – Xeo

+0

'Base 'を参照渡ししているので(これは' Derived'でも可能で、仮想のものでも動作します)、一旦クラスから取り出せば、これはとにかく起こりませんか? (クラス内の '<<"演算子は 'aBase << stuff;'と言うが、ostreamsとは何の関係もないだろう)。 – cHao

答えて

0

あなたは派生クラス内で基本クラスのメソッドを使用する場合は、呼び出しを修飾:

void Derived::func() 
{ 
    //whatever else you want to do first 
    return Base::func(); 
} 

方法はDerivedBaseあるので、あなたは、それへのアクセス権を持ってprivateでない限り。

関連する問題