亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

operator==()運算符重載為什么不能聲明為友元函數?

#pragma?once
#ifndef?COORDINATE_H
#define?COORDINATE_H
#include?<iostream>
using?namespace?std;
class?Coordinate{	
public:	
friend?bool?operator==(Coordinate?&,?Coordinate?&);	
friend?ostream&?operator<<(ostream?&os,?Coordinate?&coor);	
Coordinate&?operator=(const?Coordinate?&rhs);
	
Coordinate(int?x=0,?int?y=0);	
Coordinate(const?Coordinate?&rhs);	
//void?printCoordinate();
protected:
private:	
int?m_iX;	
int?m_iY;
};
Coordinate::Coordinate(int?x,?int?y)
{	
m_iX?=?x;	
m_iY?=?y;
}
Coordinate::Coordinate(const?Coordinate?&rhs)
{	
m_iX?=?rhs.m_iX;	
m_iY?=?rhs.m_iY;
}
Coordinate?&?Coordinate::operator=(const?Coordinate?&rhs)
{	
m_iX?=?rhs.m_iX;	
m_iY?=?rhs.m_iY;	
return?*this;
}
ostream&?operator<<(ostream?&os,?Coordinate?&coor)
{	
os?<<?"("?<<?coor.m_iX?<<?","?<<?coor.m_iY?<<?")"?<<?endl;
return?os;	
}
bool?operator==(Coordinate?&lhs,Coordinate?&rhs)
{	
if?(lhs.m_iX==rhs.m_iX&&lhs.m_iY==rhs.m_iY)		
return?true;	
else		
return?false;	
}?
#endif?//?!COORDINATE_H

operator==運算符重載仍然在下面這個成員函數中報錯

int?MyList::LocateMyList(Coordinate?*?p)
{	
for?(int?i?=?0;?i?<?m_iLength;i++)	
{		
if?(m_pList[i]?==?*p)	//error:沒有與這些操作數匹配的"=="運算符		
return?i;	
}	
return?-1;
}


正在回答

2 回答

老師好像是說 ==只傳進去一個參數 ,所以就不需要用友元函數重載

0 回復 有任何疑惑可以回復我~

你在函數申明的時候,參數都沒寫。

==運算符重載的時候,傳入一個參數就行,是比較傳入參數和當前參數。? 你寫的傳入了2個參數


個人拙見

0 回復 有任何疑惑可以回復我~
#1

寶慕林5283917 提問者

查了相關資料,= =運算符作為二元運算符重載時是可以作為友元函數并且需要傳入兩個參數的。關于函數聲明時是否需要寫入形參名稱,在C++ Primer中有提到函數在聲明時形參名稱可以不用寫出來。我在寫另外一個例子時,使用同樣的實現沒有報錯。所以感覺很奇怪。
2020-03-23 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

operator==()運算符重載為什么不能聲明為友元函數?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號