2012-04-14 145 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

我不認爲你可以直接你尋求做。但是,您可以在每個類中都有一個虛擬打印()成員,並且具有調用obj的print()方法的運算符<(流& os,Order obj)。

申報打印()作爲

virtual ostream &print(ostream &s) const; 
內每個類

然後

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

(你並不需要一個單獨的操作< <的子類)。

+0

我有一個顯示方法在每個類打印出我需要它。 它不起作用,它說它無法找到被稱爲運算符<<(ostream&os,Order)的函數; – 2012-04-14 00:36:31

+0

1.'display'應該返回'ostream&'。 2.我看到你已經聲明瞭一個'operator <<(ostream&s,Order)'。我沒有看到你已經實現它的任何地方。 3.'display'應該是虛擬的。 – DRVic 2012-04-14 01:16:19