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

Overloading C++ Insertion Operator (<<) for a class

本文关键字:lt 运算符 重载 C++ 插入      更新时间:2023-10-16

我正试图编写一个重载插入运算符的类,但在头文件中我收到了错误。

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();
}

我正在阅读一本教科书,这是他们用来举例的,但对我不起作用。有什么建议吗?

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

插入运算符(<<)可以用作成员函数或友元函数。

运算符<lt;用作成员函数

ostream& operator<<(ostream& os);

此函数应调用为:

dom << cout;

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

运算符<lt;用作好友功能

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

此函数应调用为:

cout << dom;

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

/*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;
}