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() 成员,并让 operator << (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 回答