為什么臨時對象可以直接訪問到私有成員?
代碼如下:
頭文件:
class?Coordinate?{ ????//?利用友元函數進行+號重載 ????friend?Coordinate?operator+(const?Coordinate?c1,const?Coordinate?c2); public: ????//?構造函數,帶初始化參數 ????Coordinate(int?x,int?y); ????int?getX(); ????int?getY(); private: ????//?私有屬性 ????int?m_iX; ????int?m_iY; };
cpp文件:
#include?"Coordinate.h" Coordinate?operator+(Coordinate?c1,Coordinate?c2){ ????Coordinate?temp(0,0); ????temp.m_iX?=?c1.getX()?+?c2.getX(); ????temp.m_iY?=?c1.getY()?+?c2.getY(); ????return?temp; }
為何這里可以直接使用 temp.m_iX ?
2019-09-29
看錯了,以為是成員重載
2019-09-29
樓主你理解錯了,你把友元聲明刪調同樣可以,就是operaor是成員函數,成員函數可以訪問自己的任何對象,但是類外定義的對象除了用公用接口函數調用私有成員,不可以訪問類的私有成員,你把基本的定義多看看,
2019-06-14
當天晚上和別人說到這個問題的時候想到答案了,等了2天也沒有答案,那我就自己說一下吧。
順帶一說,對象直接訪問自己的私有成員絕對是錯的。需要借助友元類/友元函數或類自己的成員函數進行訪問。
問題答案:
我們在Coordinate類中聲明了友元函數operator+(),友元函數在訪問權限上和類內函數比較相似,可以對這個類的所有數據成員進行訪問。
下面用代碼來舉例:
2019-06-13
通俗點講自己訪問自己的東西有何不可,臨時對象temp是Coordinate類,自己訪問自己的私有成員當然可以