重载C ++插入运算符(<<)

时间:2012-02-01 04:20:32

标签: c++ operator-overloading

我正在尝试编写一个重载插入操作符的类,但是在我的头文件中我得到了错误。

Overloaded 'operator<<' must be a binary operator (has 3 parameters)

这是我的代码:

.h文件

ostream & operator<<(ostream & os, Domino dom);

.cpp文件

ostream & operator<< (ostream & os, Domino dom) {
    return os << dom.toString();
}

我正在关注一本教科书,这是他们作为一个例子,但它不适合我......有什么建议吗?

3 个答案:

答案 0 :(得分:14)

您可能将operator<<放入类声明中。这意味着它需要一个额外的隐藏参数(this参数)。你需要把它放在任何类声明之外。

答案 1 :(得分:10)

插入运算符(&lt;&lt;)可以用作成员函数或朋友函数。

运营商&lt;&lt;用作会员功能

ostream& operator<<(ostream& os);

此函数应调用为:

dom << cout;

通常,如果您将运算符用作成员函数,则运算符的左侧应为对象。然后,此对象作为参数隐式传递给成员函数。但是调用会让用户感到困惑,而且看起来并不好看。

运营商&lt;&lt;用作朋友功能

friend ostream& operator<<(ostream& os, const Domino& obj);

此函数应调用为:

cout << dom;

在这种情况下,对象dom显式传递为引用。这种调用更传统,用户可以很容易地理解代码的含义。

答案 2 :(得分:0)

/*insertion and extraction overloading*/
#include<iostream>
using namespace std;
class complex
{
   int real,imag;

public:
    complex()
    {
      real=0;imag=0;
    }
    complex(int real,int imag)
    {
        this->real=real;
        this->imag=imag;
    }
    void setreal(int real)
    { 
        this->real=real; 
    }
    int getreal()
    {
       return real;
    }
    void setimag(int imag)
    { 
        this->imag=imag; 
    }
    int getimag()
    {
       return imag;
    }
    void display()
     {
      cout<<real<<"+"<<imag<<"i"<<endl;
     }

};//end of complex class

 istream & operator >>(istream & in,complex &c)
     {
         int temp;
         in>>temp;
         c.setreal(temp);
         in>>temp;
         c.setimag(temp);
         return in;
     }
 ostream &operator <<(ostream &out,complex &c)
 {
     out<<c.getreal()<<c.getimag()<<endl;
     return out;
 }

int main()
{
  complex c1;
  cin>>c1;
 // c1.display();

  cout<<c1;
  //c1.display();
  return 0;
}