基本上我的问题是: 我有一个基类和一个派生类。 我需要在派生类上调用 operator<< 但它一直在调用基类,因为它主要是作为 Order* order 创建的 Order 是静态类型,但它被更改为 order=新的特殊订单;
所以现在我需要它来调用派生类
提前致谢: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);
最佳答案
我不认为你可以直接做你想做的事。但是您可以在每个类中有一个虚拟的 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 );
}
(并且您不需要为子类使用单独的运算符<<)。
关于c++ - 我正在尝试重载运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149884/