c++ - 我正在尝试重载运算符<<

标签 c++ class polymorphism operator-overloading virtual

基本上我的问题是: 我有一个基类和一个派生类。 我需要在派生类上调用 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/

相关文章:

c++ - 简单的C++程序错误c2064 : term does not evaluate to a function taking 0 arguments

python - 多态性的实际例子

c# - 类型转换基类引用到它的实际类型

c++ - 在 C++ 中调用来自世界的私有(private)方法

c++ - 对 `mysql_init' 的 undefined reference

c++ - 搜索列表中的最后一个数据实例

c++ - 制表符(\t)有多少个空格?

java - 从java中的对象数组中检索分配给特定类成员的值数组

c# - 派生类列表上的泛型函数

javascript - 无法使用 JavaScript 控制与另一个元素共享一个 css 类的 css 元素