【问题标题】:i am trying to overload an operator<<我正在尝试重载运算符<<
【发布时间】:2012-04-14 00:16:11
【问题描述】:

基本上我的问题是: 我有一个基类和一个派生类。 我需要在派生类上调用 operator

所以现在我需要它来调用派生类

非常感谢: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);

【问题讨论】:

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


    【解决方案1】:

    我不认为你可以直接做你所寻求的。但是你可以在每个类中都有一个虚拟的 print() 成员,并让 operator

    将 print() 声明为

    virtual ostream &print( ostream &s ) const;
    

    在每个类中。

    然后

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

    (并且您不需要单独的运算符

    【讨论】:

    • 我在每个类中都有一个显示方法,可以打印出我需要的内容。它不起作用,但它说它找不到称为 operator 的函数
    • 1. display 应该返回一个 ostream &amp;。 2. 我看到你声明了operator &lt;&lt; (ostream &amp;s, Order )。我没有看到你在任何地方实现了它。 3.display应该是虚拟的。
    猜你喜欢
    • 2021-03-12
    • 1970-01-01
    • 2014-03-18
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多