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

问题描述:

我想写一个重载插入运算符但在我的头文件中出现错误的类。重载C++插入运算符(<<)

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

我下面的文字书,这就是他们的使用一个例子,但它不适合我..任何建议?

+4

是不是所谓的“按位左移运算符”? – SigTerm 2012-02-01 04:31:52

+0

如果不是那么大,你能否用整个代码更新这个问题? – 2012-02-01 04:50:50

+0

'operator 2016-09-01 03:38:43

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

插入运算符(< <)可以用作成员函数或朋友函数。如果您使用的是运营商为成员函数

dom << cout; 

一般而言,左起:

操作< <用作成员函数

ostream& operator<<(ostream& os); 

这个函数被调用为操作员的手边应该是一个物体。然后,该对象作为参数隐式传递给成员函数。但是调用混淆了用户,它看起来不太好。

cout << dom; 

在这种情况下,对象dom作为参考被明确地传递:

操作者< <用作朋友函数

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

此功能应当被调用。这种调用比较传统,用户可以很容易地理解代码的含义。

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

插入提取重载而不使用好友功能 – 2016-09-01 03:36:40