朋友运营商<<没有超载

时间:2015-10-24 19:06:38

标签: c++ overloading friend

我有一个类复杂,我想运算符<<可以打印其私有变量。

class complex
{
   double re, im;

   public:
   friend ostream operator <<(ostream &out); // What's wrong?
};

有可能吗?

3 个答案:

答案 0 :(得分:3)

您必须将两个参数传递给operator <<()(对流对象的引用和一个要传输的对象),并且您通常希望return引用传入的流所以你可以将输出传递给operator<<()的另一个调用。所以你需要这样的东西:

 friend ostream& operator <<(ostream &out, const complex& rhs);

答案 1 :(得分:1)

要输出的对象必须作为参数传递:

friend ostream& operator <<(ostream &out, const complex& obj);

然后,你必须实现这个功能,可能是这样的:

ostream& operator <<(ostream &out, const complex& obj)
{
    out << obj.re << ";" << obj.im;
    return out;
}

答案 2 :(得分:0)

是的,有可能但你在操作员参数列表中出错,有两个参数不是一个,一个用于ostream,编译器会自动识别它,在这里它必须是ostream,第二个将是类类型你将在cout&lt;&lt; 之后使用,这里是复杂的,顺便看看这个cout<<Complex cout是第一个参数,那么你应该使用这些代码它将起作用。

#include <ostream>
using std::ostream;

class Complex
{
public:
    friend ostream &operator <<(ostream &out, Complex &cmplx)
    {
        out << cmplx.im << "\t" << cmplx.re;

        return out;
    }

private:
    double re, im;
};
int main()
{
    Complex complex;

    cout<<complex;

    return 0;
}

它会打印reim的值。