我想在 Line 类中重载 << 运算符,这样我就可以像这样使用 cout 打印一个对象:
cout << myLineObject << endl;
但这不起作用:
class Line{
public:
float m;
float b;
string operator << (Line &line){return ("y = " + line.m + "x + " + line.b);};
};
我得到:
Invalid operands of types 'const char [5]' and 'float' to binary 'operator+'
我也尝试过使用 stringstream
但我得到了更多的错误。这样做的正确方法是什么?
谢谢;)
最佳答案
正确的方法是到处重载列出<<
进行了讨论,而您几乎错过了所有内容。
标准声明是ostream & operator<<(ostream & s, const & Line l);
它不能是成员函数,它需要返回对 ostream
的引用这样你就可以链接<<
和往常一样。
在您的情况下,定义类似于
ostream & operator<<(ostream & s, const & Line l)
{
return s << "y = " << l.m << "x + " << l.b;
}
请注意,您返回传入的 ostream
, 并使用 <<
打印您喜欢的内容运算符而不是使用 +
运算符(operator)。如果你遵循这个,这很简单
形式。
在这种情况下,数据成员是公开的(这通常不是一个好主意),
所以没有访问问题。如果您需要获取不可访问的值(因为
他们是private
而不是在公共(public)接口(interface)中公开),你需要声明
运算符是 friend
在类定义中。
关于c++ - 在 C++ 中重载 << 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3709389/