【问题标题】:Call an overloaded << operator on a derived class in a vector在向量中的派生类上调用重载的 << 运算符
【发布时间】:2014-09-15 07:55:55
【问题描述】:

假设你已经正确地实现了

假设您有 Base 类,并从中衍生出 DerivedOne、DerivedTwo 等。然后在您的 main 中,您有一个指向各种派生类型对象的指针向量。大致如下:

void showItems(vector<Base*>  items) {
    for (int i = 0; i < items.size(); i++) {
        cout << items[i];
    }
    cout << endl;
}

【问题讨论】:

  • 你不能直接这样做; &lt;&lt; 只调用 operator&lt;&lt;(std::ostream &amp;, const Base &amp;)
  • @OliverCharlesworth 实际上,它调用了operator&lt;&lt;( std::ostream&amp; Base const* )。这很可能只调用类型转换,并输出void*
  • @JamesKanze:啊,是的,我认为 OP 已进一步取消引用。

标签: c++ vector operator-overloading


【解决方案1】:

实现这样的事情:

class Base
{
public:
  virtual ostream& print(ostream&) const = 0;
};

ostream& operator <<(ostream& out, const Base& base)
{
  return base.print(out);
}

【讨论】:

    猜你喜欢
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多