我试图重载运算符<<

时间:2012-04-14 00:16:11

标签: c++ class polymorphism operator-overloading virtual

基本上我的问题是: 我有一个基类和派生类。 我需要调用运算符<<在派生类上,但它一直调用基类,因为在main中它创建为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);

1 个答案:

答案 0 :(得分:2)

我认为你不能直接做你想要的。但是你可以在每个类中都有一个虚拟的print()成员,并且有运算符&lt;&lt; (stream&amp; os,Order obj)调用obj的print()方法。

将print()声明为

virtual ostream &print( ostream &s ) const;

每个班级。

然后

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

(并且您不需要单独的运算符&lt;&lt;对于子类)。