日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于对象不能直接访问私有成员的误区(转)

發布時間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于对象不能直接访问私有成员的误区(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先貼代碼:

#includeusing namespace std; class CPoint { public:CPoint(int xx, int yy){x = xx;y = yy;}CPoint(const CPoint &p){x = p.x;y = p.y;} private:int x, y; };

如果你在想為什么拷貝構造函數的參數可以直接去訪問它自己的私有成員的話,你就需要好好的看完這篇文章。如果你沒有在想,那么很好,這篇文章就隨它去吧~

===============================================================================================================================

進入正文:

之所以會有上面的那個疑問,無疑的就是進入了一個認識誤區——對象是不可以直接訪問私有成員的。

但是這個真的是個超級大的誤區。

我們先來看,私有,公有,受保護的,是針對什么東西來談的:不是針對對象來說的,是針對于類來說的。是用來限定類外的東西訪問類內的東西是有限制的。從來不是對對象而言的。


如果還不是很清楚上面的表述,我們舉幾個例子來看:

1.為什么類中的成員函數可以訪問到私有的數據成員?

你可能認為它就是可以訪問,沒有為什么。不對,又為什么,就是因為它在類內。

2.為什么主函數中定義的對象不能訪問它的私有成員?

你可能認為因為它是對象,對象是不能訪問到私有成員的。不對,是因為它在類外,與對象不能訪問一點關系都沒有。


對象能否訪問到私有成員與其定義的位置有關:在類內定義,可以訪問,在類外定義,不能訪問。

到這里我們也就理解了最開始貼的那個代碼了~

再貼一個代碼:

#includeusing namespace std; #includeclass CPoint { public:CPoint(int xx, int yy){x = xx;y = yy;}friend class distance; private:int x, y; }; class distance { public:double point_to_oralpoint(CPoint p1){return sqrt(p1.x*p1.x + p1.y*p1.y);} };

好啦,我們現在又發現了一個和上面說的貌似有點違背的東西:為什么在類外定義的函數竟然可以訪問到上面類的私有成員?

因為:

在類CPoint里面聲明了distance為它的朋友類,CPoint把distance當朋友(distance未必把CPoint當朋友哦~,所以CPoint并不能訪問到distance的成員)。

CPoint把distance當朋友,distance可以通過他定義的函數中的參數表去訪問到CPoint里面的私有成員,這個私有數據成員是對其公開的,就相當于是在distance的類中,但是要通過參數(CPoint的對象)去指明這是那個對象的數據成員而已。

而這個就是最普遍的需要被了解的類外如何訪問類內的私有成員的知識點了。

總結

以上是生活随笔為你收集整理的关于对象不能直接访问私有成员的误区(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。