我可以重载<<这里的基类运算符?

时间:2014-08-15 11:58:07

标签: c++ operator-overloading ostream

所以我想创建一系列派生自基类的类,每个类实现虚方法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的输入类型。目前,我正在每个派生类中实现重载,并指定输入类型。

我可以在基类中指定重载,如果是,如何指定?

1 个答案:

答案 0 :(得分:2)

你几乎是对的。一个问题是你不应该将指针用作operator<<的参数,因为那些运算符通常使用引用:

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

然后你需要做的就是在派生类中提供虚拟toString方法 - 基类中的operator<<将调用它们。