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