C++之類(class)的三種成員修飾符(public、private、protected)總結

1、背景介紹?

? ? ? ? ?在C++中,類(class)中成員的三種訪問修飾符(access specifiers)用于控制類的成員(屬性和方法)的訪問權限。這些修飾符決定了類成員在類的外部和內部是否可以被訪問。以下是這三種訪問修飾符的詳細說明:

  1. public(公有):

    • 公有成員在類的內部和外部都可以被訪問。
    • 公有成員為類的接口部分,通常包括允許外部訪問的方法和屬性。
  2. private(私有):

    • 私有成員只能在類的內部被訪問,不能在類的外部直接訪問。
    • 私有成員通常包括那些實現類的內部邏輯和狀態的細節,不應該被外部直接訪問。
  3. protected(保護):

    • 保護成員在類的內部可以被訪問,在類的外部不能被直接訪問。

? ? ? ?外部可以理解為創建的類對象,內部為類的成員函數。

2、類中屬性訪問權限示例介紹

? ? ?下面結合代碼介紹public、private、protected修飾符對類中成員變量與成員函數的權限訪問限制。

2.1、public修飾

? ? ? 公有(public)成員:在程序類的外部內部均可訪問。如下,定義的類成員函數與變量,均使用public修飾,因此創建的類對象(Box boxObj),可以訪問類的函數與變量。同時,類中成員函數(Area())可以訪問變量,如下所示。

2.2、private修飾

? ? ?私有(private)成員:類的外部是不可訪問的,只有類可以訪問私有成員。如下圖,變量length為私有變量,在外部定義的對象(Box boxObj)已經無法訪問變量length。但是類的成員函數(Area()、SetLength())函數可以訪問變量length。

? ? ? 修改后的可運行代碼如下:

#include<iostream>
using namespace std;
class Box
{
//類變量修飾
public:double width;//寬度
private:double length;//長度//類函數修飾
public:double Area();//計算面積void SetLength(double length);
};
double Box::Area()
{return width*length;
}
void Box::SetLength(double length)
{this->length = length;//this可以看成創建一個特殊類對象,這個對象可以訪問類的所有成員(變量和函數)
}int main()
{Box boxObj;boxObj.SetLength(4);boxObj.width = 2;cout << "width of box is " << boxObj.width << endl;cout << "area of box is " << boxObj.Area() << endl;return 0;
}

運行結果如下:

2.3、protected修飾

? ? ?在同一類中,受保護的protected對象與private相同,類的外部是不可訪問的,只有類成員函數可以訪問私有成員。protected修飾的length變量,無法被外部(BoxObj)進行訪問,但是可以被類中成員函數(Area setLength)訪問。

3、小結

? ? ?public、private、protected修飾符可以控制成員變量與成員函數訪問權限,從類的成員訪問權限上看,private、protected效果一樣。但是在后續繼承中,是存在差異的。

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

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

相關文章

macOS上編譯android的ffmpeg及ffmpeg.c

1 前言 前段時間介紹過使用xcode和qt creator編譯調試ffmepg.c&#xff0c;運行平臺是在macOS上&#xff0c;本文擬介紹下android平臺如何用NDK編譯鏈編譯ffmepg庫并使用。 macOS上使用qt creator編譯調試ffmpeg.c macOS上將ffmpeg.c編譯成Framework 大體思路&#xff1a; 其…

信息學奧賽初賽天天練-18-挑戰程序閱讀-最長公共子序列、字符串與數組越界的巧妙應用

PDF文檔公眾號回復關鍵字:20240601 1 2023 CSP-J 閱讀程序2 閱讀程序&#xff08;程序輸入不超過數組成字符串定義的范圍&#xff1a;判斷題正確填√&#xff0c;錯誤填&#xff1b;除特殊說明外&#xff0c;判斷題1.5分&#xff0c;選擇題3分&#xff0c;共計40分&#xff…

從創意到成功:創業全過程詳解

目錄 創業目標市場的選擇和分析用戶畫像的描繪軟件產品的核心功能和價值主張競爭對手分析及自身競爭優勢目標用戶的具體需求調研初步的產品設計思路或框架技術棧的選擇基于哪些考量如何規劃產品的迭代路線圖預計的商業模式 1. 創業目標市場的選擇和分析 市場選擇的重要性 創…

YOLOv10漲點改進:IoU優化 | Powerful-IoU更好、更快的收斂IoU,效果秒殺CIoU、GIoU等 | 2024年最新IoU

??????本文獨家改進:Powerful-IoU更好、更快的收斂IoU,是一種結合了目標尺寸自適應懲罰因子和基于錨框質量的梯度調節函數的損失函數 ??????MS COCO和PASCAL VOC數據集實現漲點 《YOLOv10魔術師專欄》將從以下各個方向進行創新: 【原創自研模塊】【多組合點優…

spark SQL優化器catalyst學習

一、Catalyst 概述 Catalyst 是 Spark SQL 的優化器&#xff0c;它負責將 SQL 查詢轉換為物理執行計劃。Catalyst 優化器的目標是生成高效的執行計劃&#xff0c;以最小化查詢的執行時間。它使用了多種優化技術&#xff0c;包括基于規則的優化、基于代價的優化和動態規劃等。我…

Dijkstra求最短路篇二(全網最詳細講解兩種方法,適合小白)(python,其他語言也適用)

前言&#xff1a; Dijkstra算法博客講解分為兩篇講解&#xff0c;這兩篇博客對所有有難點的問題都會講解&#xff0c;小白也能很好理解。看完這兩篇博客后保證收獲滿滿。 第一篇博客講解樸素Dijkstra算法Dijkstra求最短路篇一(全網最詳細講解兩種方法&#xff0c;適合小白)(p…

openstack 中如何檢查VLAN 配置: 確保正確配置了兩個 VLAN,并且兩個 VLAN 之間進行了正確的路由。

在 OpenStack 中檢查 VLAN 配置并確保兩個 VLAN 之間進行了正確的路由&#xff0c;可以按照以下步驟進行操作&#xff1a; 查看網絡配置&#xff1a; 登錄到 OpenStack 控制節點上的命令行界面。使用 neutron net-list 命令查看當前存在的網絡列表。找到與你關注的 VLAN 相關的…

計網ppt標黃知識點整理第(2)章節——謝希仁版本、期末復習自用

物理層考慮的是怎樣才能在連接各種計算機的傳輸媒體上傳輸數據比特流&#xff0c;而不是指具體的傳輸媒體。4 個特性&#xff1a; 機械特性&#xff1a;指明接口所用接線器的形狀和尺寸、引線數目和排列、固定和鎖定裝置等。 電氣特性&#xff1a;指明在接口電纜的各條線上出現…

如何在 JS 中快速讀取文件

本文翻譯自 How to read files quickly in JavaScript&#xff0c;作者&#xff1a;Daniel Lemire&#xff0c; 略有刪改。 假設你需要在服務器上使用JavaScript讀取多個文件。在像Node.js這樣的運行時環境中&#xff0c;JavaScript有多種讀取文件的方式。哪一種是最好的呢&…

Linux軟件安裝包rpm與tgz格式的區別

rpm與tgz的區別 1、Linux軟件包的內容分類2、Linux軟件包的格式分類 1、Linux軟件包的內容分類 Linux應用程序的軟件包按內容類別可分為兩類&#xff1a; 可執行文件&#xff08;編譯后的二進制軟件包&#xff09; 解包后可以直接運行&#xff0c;看不到源代碼。例如&#xff0…

基于Springboot駕校預約平臺小程序的設計與實現(源碼+數據庫+文檔)

一.項目介紹 系統角色&#xff1a;管理員、教練、學員 小程序(僅限于學員注冊、登錄)&#xff1a; 查看管理員發布的公告信息 查看管理員發布的駕校信息 查看所有教練信息、預約(需教練審核)、評論、收藏喜歡的教練 查看管理員發布的考試信息、預約考試(需管理…

代碼隨想錄算法訓練營Day8|541. 反轉字符串II、替換數字、151.翻轉字符串里的單詞、卡碼網:55.右旋轉字符串

541. 反轉字符串II 1.這道題剛開始把題意理解錯了&#xff0c;以為對于任意長度的字符串都只反轉[0,k-1]以及[2k,3k-1]區間的值。 2.但實際上是要把一個字符串分成若干長度為2k的小區間&#xff0c;反轉前[0,k-1]的字符串&#xff0c;[k,2k-1]保持不變; 3.如果有一個區間字符串…

2024年東北師范CCPC

文章目錄 A.Paper WateringB.nIM gAMEE.Checksum A.Paper Watering 思路&#xff1a;題目說有平方和開方兩種操作&#xff0c;如果這個數是平方數&#xff0c;那么它開方之后就只能開方&#xff0c;如果平方的話就重復了&#xff0c;反之就有開方和平方兩種操作。 代碼如下 //…

為了方便看公眾號文章,我搭建了個博客,在線看公眾號所有歷史文章,想看哪天的文章一秒就能找到

公眾號沒有個網頁版的文章列表&#xff0c;只能在電腦和手機客戶端看&#xff0c;想看之前的歷史文章只能一直往下拉&#xff0c;想找某篇文章非常費勁。 為了方便看公眾號文章&#xff0c;我搭建了個博客&#xff0c;博客地址https://sushengbuhuo.github.io/blog &#xf…

通過 SFP 接口實現千兆光纖以太網通信1

基于米聯客ARTIX-7 系列開發板及其開發手冊。 總體實現框圖如下&#xff1a; SFP 接口 SFP 信號定義如下圖所示。 Tri Mode Ethernet MAC 設置 由于使用千兆通訊&#xff0c;因此將速率設為 1Gbps。如下圖所示。 首先&#xff0c;由于該 IP 需要與 IP 核 1G/2.5G Ethernet …

基于IoTDB 平臺的學習和研究

Apache IoTDB&#xff08;物聯網數據庫&#xff09;是一個針對物聯網領域的高性能原生數據庫&#xff0c;適用于數據管理和分析&#xff0c;并可在邊緣計算和云端部署。由于它輕量級的架構、高性能和豐富的功能集&#xff0c;以及與Apache Hadoop、Spark和Flink的深度集成&…

【面試】生成class文件的編譯器有哪些?

目錄 1. 說明2. javac3. IDE(集成開發環境)中的編譯器3.1 Eclipse編譯器3.2 IntelliJ IDEA編譯器 1. 說明 1.javac和IDE中的編譯器是最常用的和主要的。2.這些編譯器都能夠將Java源代碼編譯為可在JVM上執行的字節碼文件&#xff0c;是實現Java跨平臺特性的關鍵。3.選擇編譯器時…

數據管理知識體系必知的14張語境關系圖

近期對數據管理知識體系中的語境關系圖進行了整體學習梳理,總共有14張圖,具體如下,供大家參考。應該說語境關系圖和環境因素六邊形圖是各有側重、互為補充關系。語境關系圖是環境因素六邊形圖的細化,描述了每個知識領域中的細節,相當于數據管理的微觀視角, 包括與人員、 …

kali中切換python版本

kali中切換python版本 在日常使用的過程中&#xff0c;可以通過一些工具來做打靶環境&#xff0c;或者工具的啟動&#xff0c;都和python關聯&#xff0c;而有時存在工具安裝&#xff0c;或者運行的時候出現報錯&#xff0c;這時候極大可能是因為我們本地的kali中python的版本不…

Android Studio | 小白如何運行別人的安卓項目

目錄 Step1&#xff1a;正確地打開項目 Step2&#xff1a;AS 同步時報錯 Step3&#xff1a;同步完成后啟動 Step4&#xff1a;啟動成功 說明&#xff1a;本文簡稱 Android Studio 為 AS Step1&#xff1a;正確地打開項目 重點&#xff1a;確認好項目的根目錄是哪個目錄&am…