This question already has answers here:
What are the basic rules and idioms for operator overloading?
                                
                                    (7个答案)
                                
                        
                                2年前关闭。
            
                    
我曾经将operator <
class MyClass {
    int myAttribute;

public :

    MyClass(int attr):
        myAttribute(attr){}

    int getter() {return myAttribute;}
};

MyClass operator+(MyClass mc1, MyClass mc2)
{
    MyClass mc(mc1.getter()+mc2.getter());
    return mc;
}

std::ostream& operator<< (std::ostream &stream, MyClass mc)
{
    stream << mc.getter();
    return stream;
}


所有这些都很好,但是有人告诉我可以将其定义为方法。我删除了operator +和operator <
MyClass MyClass::operator+(MyClass mc1)
{
    MyClass mc(mc1.getter()+myAttribute);
    return mc;
}


但这不适用于运算符<<

std::ostream& MyClass::operator<< (std::ostream &stream)
{
    stream << myAttribute;
    return stream;
}


我得到错误:

error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'MyClass')


我想念什么?

最佳答案

编写std::ostream& MyClass::operator<< (std::ostream &stream)时将使用MyClass m; m << std::cout;。那不是你想要的。

如果添加std::ostream &std::ostream::operator<<(const MyClass &m),则适用于MyClass m; std::cout << m;,但它要求您更改标准标头,而不能更改,因此非成员版本是唯一可行的选择。

请注意,非成员版本不是MyClass的一部分,因此无法访问privateMyClass成员。如果需要,可以将friend std::ostream& operator<< (std::ostream &stream, const MyClass &mc);添加到MyClass以使其成为可能。

关于c++ - 不能使用operator <<作为方法吗? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42537441/

10-11 22:47
查看更多