1

基本的に私の問題は何ですか:私は基本クラスと派生クラスを持っています。派生クラスで operator<< を呼び出す必要がありますが、メインでは 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);
4

1 に答える 1

2

求めていることを直接行うことはできないと思います。ただし、各クラスに仮想 print() メンバーを配置し、演算子 << ( stream & os, Order obj ) で obj の print() メソッドを呼び出すことができます。

print() を次のように宣言します。

virtual ostream &print( ostream &s ) const;

各クラス内。

それで

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

(そして、子クラスに個別の operator<< は必要ありません)。

于 2012-04-14T00:24:09.683 に答える