2012-01-03 166 views
1
#include <iostream> 
#include <fstream> 
using namespace std; 

class Integer 
{ 
    public: 
    int i; 

    Integer (int ll = 0, int k = 0) : i (ll) 
    { 
     cout << "\nconstructor A\n"; 
    } 

    Integer operator<< (const Integer& left, const Integer& right); 
}; 

Integer operator<< (const Integer& left, const Integer& right) 
{ 
    cout << "\ndsfdsfdsf : " << "===" << right.i << "\n"; 
    return left ; 
} 

int main() 
{ 
    Integer l; 

    l << 5 << 3 << 2; 

    return 0; 
} 

此代碼給出上述標題錯誤,當我從< <操作者的聲明刪除關鍵字friend
這裏沒有什麼私人的,爲什麼它會發生?錯誤:整數整數::運算<<(常量整數&,常量整數&)'必須採取只有一個參數

回答

3

當運算符聲明不包含friend時,該聲明聲明瞭一個成員,並且成員將其類作爲其隱式第一個參數。用這兩個明確的參數,這爲二元運算符提供了三個參數。

+0

所以,當一個聲明是朋友,什麼是類意下如何? – 2012-01-03 08:20:37

+1

@AnishaKaul:一個「朋友」適用於所有目的的普通功能,但具有特殊的訪問權限。該行爲與您在類的上方聲明瞭一個自由函數'Integer運算符<<(const Integer&left,const Integer&right)',並且公開所有成員的行爲相同。 – thiton 2012-01-03 08:23:05

0

正確的版本應該是這樣的

#include <iostream> 
#include <fstream> 
using namespace std; 

class Integer 
{ 
    public: 
    int i; 

    Integer (int ll = 0, int k = 0) : i (ll) 
    { 
     cout << "\nconstructor A\n"; 
    } 

    Integer operator<< (const Integer& right) 
    { 
     cout << "\ndsfdsfdsf : " << "===" << right.i << "\n"; 
     return *this ; 
    } 
}; 



int main() 
{ 
    Integer l; 
    l << 5 << 3 << 2; 
    return 0; 
} 
+2

不正確,你的'operator <<'按值返回。 – jrok 2012-01-03 08:27:02

+0

希望它工作! – Hiren 2012-01-03 08:27:14