2012-04-14 8 views
1

im Grunde, was mein Problem ist: Ich habe eine Basisklasse und eine abgeleitete Klasse. Ich muss den Operator < < für die abgeleitete Klasse anrufen, aber es ruft weiterhin die Basisklasse, weil es im Wesentlichen als Auftrag erstellt wurde * Auftrag Auftrag ist der statische Typ, aber es wird geändert in order = new SpecialOrder;Ich versuche, einen Operator <<

so jetzt muss ich es der abgeleiteten Klasse

Dank im Voraus eine Menge nennen: 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); 

Antwort

2

ich Sie nicht direkt denken, tun können, was Sie suchen. Aber Sie können ein virtuelles print() - Mitglied in jeder der Klassen haben und den Operator < < (Stream & os, Order obj) rufen obj die print() -Methode.

Deklarieren print() als

virtual ostream &print(ostream &s) const; 

innerhalb jeder der Klassen.

Dann

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

(und Sie müssen nicht mehr gesondert < < für das Kind Klasse).

+0

Ich habe eine Anzeige-Methode in jeder Klasse, die ausdruckt, was ich brauche. es funktioniert nicht tho es sagt, dass es die Funktion nicht finden kann, die der Operator << (ostream & os, Order) genannt wird; –

+0

1. 'display' sollte einen 'ostream &' zurückgeben. 2. Ich sehe, dass Sie einen 'Operator << (ostream & s, Order)' deklariert haben. Ich sehe nirgends, dass Sie es implementiert haben. 3. 'display' sollte virtuell sein. – DRVic