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

관련 문제