【问题标题】:Can I overload the << operator in a base class here?我可以在这里重载基类中的 << 运算符吗?
【发布时间】:2014-08-15 11:58:06
【问题描述】:

所以我希望创建一系列从基类派生的类,每个类都实现了虚拟方法std::string toString() const。我可以像这样在基类中为

    class BaseDataType
    {
        friend std::ostream& operator<<(std::ostream& os, const BaseDataType* obj)
        {
            os << obj->toString();
            return os;
        }

     .... rest of class

我的问题在于指定obj 的输入类型。目前,我正在每个派生类中实现重载,并指定输入类型。

能否在基类中指定重载,如果可以,如何指定?

【问题讨论】:

  • 当你尝试时,出了什么问题?
  • 您在问题中几乎有自己的答案,但我建议您参考而不是指针。为什么它不适合你?
  • 这里更规范的形式是std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const BaseDataType&amp; obj);通过引用获取对象。

标签: c++ operator-overloading ostream


【解决方案1】:

你说得差不多了。一个问题是您不应该将指针用作operator&lt;&lt; 的参数,因为这些运算符通常使用引用:

friend std::ostream& operator<<(std::ostream& os, const BaseDataType& obj)
{
  os << obj.toString();

那么您需要做的就是在派生类中提供虚拟toString 方法——基类中的operator&lt;&lt; 将调用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多