c++ - 在 C++ 中重载 << 运算符

标签 c++ operators

我想在 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/

相关文章:

C++ & DirectX - 几何问题

Matlab,运算符 A\B

c# - |=(单管道等于)和&=(单&符号等于)是什么意思

c++ - 不同平面上的多边形之间的三角剖分

c++ - 是否添加到 "char *"指针 UB,但它实际上并不指向 char 数组?

c++ - 使用 soundtouch 库在 iOS 中检测 BPM

c# - 通用 C# 类中 == 与 Equals 的性能

javascript - 为什么 [] == [] 在 JavaScript 中为假?

c# - 在 C# 中定义新的运算符?

c++ - 为什么使用 PHP 数百个数据库连接无关紧要..但在 C++ 应用程序中却很重要?