2012-04-14 43 views
1

基本的に私の問題は何ですか: 私は基本クラスと派生クラスを持っています。 派生クラスで< <という演算子を呼び出す必要がありますが、メインクラスがOrder * orderとして作成されているため、基本クラスを呼び出し続けます。 Orderは静的型ですが、 order = new SpecialOrder;私は演算子をオーバーロードしようとしています<<

ので、今、私はそれはたくさん事前に

感謝派生クラスを呼び出す必要があります:D

//SpecialOrder.h 
#include"Order.h" 
class SpecialOrder : public Order// derived class 
{ 
    char* string; 
    public: 
    SpecialOrder(); 
    SpecialOrder(const ISBN& isbn, const char* instr); 
    SpecialOrder(const SpecialOrder& source); 
    bool add(istream& is); 
    void display(ostream& os) const; 
    SpecialOrder& operator=(const SpecialOrder& source); 
    ~SpecialOrder(); 

}; 
ostream& operator<<(ostream& os, SpecialOrder obj); 

//Order.h 
#include "ISBN.h" 
class Order // base class 
{ 
    int ordered; 
    int delivered; 
    ISBN isbn; 
    public: 
    Order(); 
    Order(const ISBN& isbn); 
    bool has(const ISBN& isbn) const; 
    int outstanding() const; 
    virtual bool add(istream& is); 
    bool add(int n); 
    bool receive(istream& is); 
    void display(ostream& os) const; 
}; 
ostream& operator<<(ostream& os, Order obj); 

答えて

2

私はあなたが求めるものを直接行うことができるとは思いません。しかし、各クラスに仮想print()メンバを持ち、オペレータ< <(ストリーム& os、Order obj)をobjのprint()メソッドで呼び出すことができます。各クラス内

virtual ostream &print(ostream &s) const; 

として

宣言プリント()。

その後

inline ostream & operator << (ostream &os, const Order &obj) 
    { 
    return obj.print(os); 
    } 

(とあなたは子クラスのために別々のオペレータ< <は必要ありません)。

+0

私は必要なものを印刷する各クラスに表示メソッドを持っています。 オペレータ<<(ostream&os、Order)と呼ばれる関数を見つけることができないという意味では機能しません。 –

+0

1. 'display'は' ostream& 'を返します。 2.演算子<<(ostream&s、Order) 'を宣言しています。あなたがそれを実装しているところはどこにも見当たりません。 3. 'display'は仮想でなければなりません。 – DRVic

関連する問題