關于對象不能直接訪問私有成員的誤區(轉)

先貼代碼:

#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的對象)去指明這是那個對象的數據成員而已。

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449113.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449113.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449113.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

阿里云 ECS服務器 開放 8080 端口 -- 圖解

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 由于 kong-dashboard 的端口是映射到 8080 的,服務已啟動成功卻一直訪問不了,最后才想起端口沒有開放 ... 1. 登…

.NET高級代碼審計(第三課)Fastjson反序列化漏洞

0X00 前言 Java中的Fastjson曾經爆出了多個反序列化漏洞和Bypass版本,而在.Net領域也有一個Fastjson的庫,作者官宣這是一個讀寫Json效率最高的的.Net 組件,使用內置方法JSON.ToJSON可以快速序列化.Net對象。讓你輕松實現.Net中所有類型(對象,…

IDEA:No SLF4J providers were found.

如果您是用IDEA 的 maven 寫的 將slf4j的導入包 更改 為下列代碼 <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.8.0-beta2</version></dependency><dependency><groupId&…

【C++基礎】時間類型詳解(轉)

Unix時間戳(Unix timestamp)&#xff0c;或稱Unix時間(Unix time)、POSIX時間(POSIX time)&#xff0c;是一種時間表示方式&#xff0c;定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數。Unix時間戳不僅被使用在Unix 系統、類Unix系統中&#xff0c;也在許多其…

沒變強是因為你太舒服(圖)

職業生涯很長&#xff0c;對企業而言&#xff0c;它需要你成為一個專才&#xff0c;但從職業發展來看&#xff0c;你需要成為一個全才&#xff0c;方能適應社會的變化。 阻礙你成為全才的不良習慣有很多&#xff0c;有時候我們喜歡趨利避害&#xff0c;拖延癥更是讓自己定下來…

解決:DuplicateMappingException: Table [xx] contains physical column name referred to by multiple ... .

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff1a; Caused by: org.hibernate.DuplicateMappingException: Table [xxx] contains physical column name [comment] …

0323表格學習

上午早來復習了一會昨天的課程。今天主要學習了表格的標簽寫法&#xff0c;難度不大&#xff0c;但是合并行與合并列容易混淆搞不明白。 <!--有序列表--> <ol type"I"> <li>數學</li> <li>英語</li> &l…

路由進階

1>路由組件傳參 在組件中使用 $route 會使之與其對應路由形成高度耦合&#xff0c;從而使組件只能在某些特定的 URL 上使用&#xff0c;限制了其靈活性。 解決方法: 1.1若是動態匹配頁面&#xff0c;只需要在路由參數中加入props:true即可。 import Home from "/views/…

物聯網攝像機通訊_網絡調試助手

1&#xff0c;文檔目的&#xff1a; 了解對于物聯網網關與攝像機協議聯動&#xff0c;進行報警抓圖&#xff0c;智能檢測&#xff0c;OSD疊加&#xff0c;語音播報控制等聯動及數據交互。 適用產品&#xff1a;物聯網網關 &#xff08;OSD是屏幕顯示技術的一種&#xff09; 2…

linux 復制指定目錄下的全部文件到另一個目錄中,linux cp 文件夾

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 linux復制指定目錄下的全部文件到另一個目錄中復制指定目錄下的全部文件到另一個目錄中文件及目錄的復制是經常要用到的。linux下進行復…

銀行不告訴的秘密,看完豁然大悟

隨著理財意識的廣泛普及&#xff0c;每個人與銀行打交道的次數越來越頻繁&#xff0c;對于銀行知識、業務的了解似乎也有了很大的進步。 但總有一些看似很“肯定”的事&#xff0c;在銀行那里卻成了“不一定”。 在銀行里&#xff0c;還存在著不少讓非專業人士“意想不到”…

TOJ 3046: 招商銀行網絡系統

3046: 招商銀行網絡系統 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 12 Accepted:3 Description 雖然招商銀行的網絡安全已經做得非常完善&#xff0c;但是天有不測風云&#xff0c;招商銀行內部網絡系統的一臺服務器意外感…

vue打包成app后,背景圖片不顯示

問題&#xff1a; 在使用npm run build 打包后&#xff0c; 如果在頁面中使用img標簽引入&#xff0c;打包后的路徑是由index.html開始訪問的&#xff0c;真正訪問的是Static/img/圖片名&#xff0c; 是正確的&#xff0c; 但是寫在css 中的background: url("../../assets…

解決: Linux – git: command not found

出錯原因&#xff1a;服務器沒有安裝GIT&#xff0c;所以導致出錯。 解決方法&#xff1a; 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Centos下使用&#xff1a;yum install git…

19-03-25

關于上拉加載和下拉刷新 minirefresh.github.io/minirefresh… 這是一個插件&#xff0c;應該是默認禁止了e.preventDefault和e.stopPropagation&#xff0c;而且在每次touchend中判斷當前滾動條位置&#xff0c;如果到達上部頂部&#xff0c;則再次雙禁止&#xff0c;因為插件…

如何設計函數?

函數&#xff1a; 一段具有某項功能的代碼&#xff0c;是C語言中管理代碼的單位。 把代碼封裝成一個個函數&#xff0c;可以方便的管理和調用代碼。函數分類&#xff1a; 標準庫函數&#xff1a;C語言標準為委員會為C語言以函數形式提供的一些基礎功能&#xff0c;被封裝在lib…

八個被現代科學證實的古老信條

近年來&#xff0c;現代科學證實了很多古代智慧中的教導和信念。幾個世紀以來我們都知道這些信念能夠幫助我們生活的幸福、健康和平衡。《赫芬頓郵報》將八個被現代科學證實的古老信仰整理如下。 1.幫助他人能讓你更健康 近年來&#xff0c;現代科學證實了很多古代智慧中的教…

Hystix熔斷解決雪崩問題

1.線程隔離&#xff0c;服務降級&#xff08;服務的消費方做降級處理&#xff09; 當服務繁忙時&#xff0c;如果服務出現異常&#xff0c;不是粗暴的直接報錯&#xff0c;而是返回一個友好的提示&#xff0c;雖然拒絕了用戶的訪問&#xff0c;但是會返回一個結果。 這就好比去…

Docker 環境下如何 安裝 Zookeeper

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 第一步&#xff1a;首先下載Zookeeper的鏡像文件&#xff1a; 從倉庫中pull 這個zookeeper鏡像&#xff1a;docker pull jplock/zookeep…

office教程:教你Excel 怎么樣使用信息函數

Excel如何使用信息函數信息函數專門用來返回某些指定單元格或區域的信息&#xff0c;例如獲取文件路徑、單元格格式信息或操作環境信息等。一&#xff0c;使用CELL函數返回引用單元格信息工作表中的每一個單元格都有對應的單元格格式、位置和內容等信息&#xff0c;在Excel中可…