2012-02-01 211 views
4

我想寫一個重載插入運算符但在我的頭文件中出現錯誤的類。重載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

回答

14

您可能會將您的operator<<放入類聲明中。這意味着它需要一個額外的隱藏參數(this參數)。你需要把它放在任何類聲明之外。

10

插入運算符(< <)可以用作成員函數或朋友函數。如果您使用的是運營商爲成員函數

dom << cout; 

一般而言,左起:

操作< <用作成員函數

ostream& operator<<(ostream& os); 

這個函數被調用爲操作員的手邊應該是一個物體。然後,該對象作爲參數隱式傳遞給成員函數。但是調用混淆了用戶,它看起來不太好。

cout << dom; 

在這種情況下,對象dom作爲參考被明確地傳遞:

操作者< <用作朋友函數

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

此功能應當被調用。這種調用比較傳統,用戶可以很容易地理解代碼的含義。

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

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