C++ 訪問限定符

目錄

訪問修飾符概述

protected在類的內部和派生類中訪問調用

private在類的內部訪問和調用


訪問修飾符概述

在C++中,有三個主要的訪問修飾符:public、private和protected。這些修飾符用于控制類的成員(變量和函數)的訪問權限。

  1. public:

    • 用public修飾的成員可以在類內部、類外部以及派生類中進行訪問。
    • public成員對外部是可見的,可以直接訪問。
    • 公共成員通常用于提供接口和公開的數據成員。
  2. private:

    • 用private修飾的成員只能在類內部進行訪問。
    • private成員對外部是不可見的,無法直接訪問。
    • 私有成員通常用于實現類的內部細節和私有數據成員。
  3. protected:

    • 用protected修飾的成員可以在類內部以及派生類中進行訪問。
    • protected成員對外部是不可見的,無法直接訪問。
    • 保護成員主要用于派生類繼承和訪問基類的成員。

這些訪問修飾符的使用可以幫助我們控制類的接口和實現的可見性,從而實現封裝性和繼承性的概念。

class MyClass {
public:int publicVar;    // 公有成員變量void publicFunc() {    // 公有成員函數// 函數體}private:int privateVar;    // 私有成員變量void privateFunc() {    // 私有成員函數// 函數體}protected:int protectedVar;    // 保護成員變量void protectedFunc() {    // 保護成員函數// 函數體}
};int main() {MyClass obj;obj.publicVar = 10;    // 可以訪問公有成員變量obj.publicFunc();    // 可以調用公有成員函數// obj.privateVar = 20;    // 錯誤,無法訪問私有成員變量// obj.privateFunc();    // 錯誤,無法調用私有成員函數// obj.protectedVar = 30;    // 錯誤,無法訪問保護成員變量// obj.protectedFunc();    // 錯誤,無法調用保護成員函數return 0;
}
  • public:公有訪問限定符,被聲明為public的成員可以在類的內部和外部被訪問。在上面的示例中,publicVarpublicFunc被聲明為公有成員,可以在類的內部和外部訪問和調用。

  • private:私有訪問限定符,被聲明為private的成員只能在類的內部訪問,外部無法直接訪問。在上面的示例中,privateVarprivateFunc被聲明為私有成員,只能在類的內部訪問和調用。

  • protected:保護訪問限定符,被聲明為protected的成員可以在類的內部訪問,同時在派生類中也可以訪問。在上面的示例中,protectedVarprotectedFunc被聲明為保護成員,只能在類的內部和派生類中訪問和調用。

需要注意的是,訪問限定符僅用于類的成員,不影響類的對象。在類的對象中,無論是公有、私有還是保護成員,都可以通過對象訪問符.或指針訪問符->來訪問。在示例代碼中,obj.publicVar可以訪問公有成員變量,obj.publicFunc()可以調用公有成員函數。但是,私有和保護成員在對象外部是無法直接訪問的。

protected在類的內部和派生類中訪問調用

當成員被聲明為protected時,它們可以在類的內部和派生類中進行訪問和調用。下面是一個使用protected訪問限定符的示例代碼:

#include <iostream>class Base {
protected:int protectedVar;public:void setProtectedVar(int value) {protectedVar = value;}
};class Derived : public Base {
public:void accessProtectedVar() {protectedVar = 10;  // 在派生類中可以直接訪問和修改基類的protected成員變量}void accessBaseMember() {setProtectedVar(20);  // 在派生類中可以調用基類的公有成員函數來間接訪問和修改protected成員變量}
};int main() {Derived d;d.accessProtectedVar();    // 在派生類對象中訪問protected成員變量d.accessBaseMember();    // 在派生類對象中訪問和修改protected成員變量return 0;
}

在上述代碼中,Base類中的protectedVar被聲明為protected,表示它可以在類的內部和派生類中進行訪問。Derived類繼承自Base類,并能夠訪問和修改基類的protectedVar成員變量。

Derived類中的accessProtectedVar函數中,可以直接使用protectedVar來訪問和修改基類的protected成員變量。

accessBaseMember函數中,通過調用基類的公有成員函數setProtectedVar來間接訪問和修改基類的protected成員變量。

通過在派生類中訪問和修改基類的protected成員,可以實現對基類成員的擴展和定制。

private在類的內部訪問和調用

當成員被聲明為private時,它們只能在類的內部進行訪問和調用,無法在類的外部或派生類中直接訪問。下面是一個使用private訪問限定符的示例代碼:

#include <iostream>class MyClass {
private:int privateVar;public:void setPrivateVar(int value) {privateVar = value;}void accessPrivateVar() {std::cout << "Accessing privateVar: " << privateVar << std::endl;}
};int main() {MyClass obj;obj.setPrivateVar(10);  // 在類的內部調用公有成員函數來修改私有成員變量obj.accessPrivateVar();  // 在類的內部調用公有成員函數來訪問私有成員變量// obj.privateVar = 20;   // 錯誤,無法在類的外部直接訪問私有成員變量return 0;
}

在上述代碼中,MyClass類中的privateVar被聲明為private,表示它只能在類的內部進行訪問。在MyClass類中,我們定義了setPrivateVar函數來間接修改私有成員變量,以及accessPrivateVar函數來訪問私有成員變量。

main函數中,我們創建了MyClass類的對象obj,并通過調用公有成員函數setPrivateVar來修改私有成員變量privateVar的值。然后,通過調用公有成員函數accessPrivateVar來訪問私有成員變量并輸出其值。

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

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

相關文章

2023年9月8日 Go生態洞察:gopls的擴展與Go生態系統的成長

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

AI材料專題報告:AI革命催生新需求國產替代推動新方向

今天分享的AI系列深度研究報告&#xff1a;《AI材料專題報告&#xff1a;AI革命催生新需求國產替代推動新方向》。 &#xff08;報告出品方&#xff1a;光大證券&#xff09; 報告共計&#xff1a;25頁 1、算力需求增長催生 800G 光模塊需求 算力是數字經濟時代新生產力&…

2023年10月9日 Go生態洞察:深入了解類型推斷及其更多細節

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

【C++ Primer Plus學習記錄】if語句

目錄 一、if語句 二、if else語句 三、格式化if else語句 四、if else if else結構 一、if語句 if語句讓程序能夠決定是否應執行特定的語句。 if有兩種格式&#xff1a;if和if else。 if語句的語法與while相似&#xff1a; if(test-condition)statement; 如果test-con…

Android 從assets讀取文件裝載成Bitmap,Kotlin

Android 從assets讀取文件裝載成Bitmap&#xff0c;Kotlin /*** fileName assets里面圖片文件名*/fun readBitmapFromAssets(ctx: Context, fileName: String): Bitmap? {val assetManager: AssetManager ctx.assetsvar bitmap: Bitmap? nulltry {val inputStream assetMa…

Java預科知識

以下內容是根據狂神的Java說、chatgpt和csdn相關博客&#xff0c;結合自己的理解完成的。 Java了解 基于Java 開發了巨多的平臺&#xff0c;系統&#xff0c;工具 構建工具&#xff1a; Ant, Maven, Jekins應用服務器&#xff1a;Tomcat, Jetty, Jboss, Websphere, weblogic…

程序員入門:打造抖音同城外賣小程序的技術解析

在當今數字化時代&#xff0c;外賣平臺已經成為人們生活中不可或缺的一部分&#xff0c;而抖音作為一款社交媒體平臺&#xff0c;也開始涉足同城外賣服務。本文將為初學者提供一份關于如何打造抖音同城外賣平臺的技術解析&#xff0c;探討其中的關鍵技術和步驟。 一、項目規劃…

【C++】輸入輸出流 ⑤ ( cin 輸入流對象 | cin.ignore() 函數 | cin.peek() 函數 | cin.putback() 函數 )

文章目錄 一、cin.ignore() 函數1、cin.ignore() 函數簡介2、cin.ignore() 函數原型3、代碼示例 - cin.ignore() 函數 二、cin.peek() 函數1、cin.peek() 函數簡介2、代碼示例 - cin.peek() 三、cin.putback() 函數1、cin.putback() 函數簡介2、代碼示例 - cin.putback() 一、c…

if語句和switch語句來確定金額之下的優惠折扣

一、優惠規則 輸入相應的金額&#xff0c;可以獲得規則之下&#xff0c;金額相應的享受的折扣&#xff0c;需要先定義金額&#xff0c;然后就是使用if語句進行判斷&#xff0c;使用switch語句選擇判斷規則之下對應的優惠折扣。 二、相關代碼 public class DiscountPrice {p…

<DB2>《DB2使用期間一些注意事項》

1 建存儲過程時 Create 后不能使用 TAB 鍵 create procedure create 后只能用空格&#xff0c;而不可用 tab 健&#xff0c;否則編譯會通不過。 2 查看語句執行計劃 dynexpln -d testdb -f test.sql -o test.out -g -z ; sql 語句放在 test.sql 中&#xff0c;結果輸出到 te…

git 拉取項目指定目錄或者指定文件

因為要做數據庫自動更新&#xff0c;需要拉取Gitlab項目中/bm-server-biz/docs目錄下的表更新sql文件&#xff0c;其他的都不需要&#xff0c;這時候可以利用git的“sparse checkout”方法&#xff08;設置稀疏檢出&#xff09;來實現。 1、在項目目錄下git 初始化 [rootxcc-…

開源軟件:JumpServer、DataEase、MeterSphere

FIT2CLOUD 認識開源軟件之前&#xff0c;先了解一下開發團隊FIT2CLOUD。FIT2CLOUD&#xff08;飛致云&#xff09;是一家中國領先的開源軟件公司&#xff0c;成立于2014年。公司專注于提供工業操作系統技術平臺與解決方案&#xff0c;是中國工業互聯網行業的領軍企業&#xff…

矩陣處理—Zigzag矩陣打印

與其明天開始&#xff0c;不如現在行動&#xff01; 文章目錄 Zigzag矩陣打印1.1 題目描述1.2 解決思路1.3 代碼實現 &#x1f48e;總結 Zigzag矩陣打印 1.1 題目描述 有一個n行m列的矩陣&#xff0c;要求按照Z字形打印出數據&#xff0c;如圖&#xff1a; 1.2 解決思路 用一…

Weblogic T3協議反序列化漏洞

文章目錄 1. Weblogic T3協議反序列化漏洞1.1 漏洞描述1.2 基本原理1.3 漏洞復現1.4 修復建議 1. Weblogic T3協議反序列化漏洞 1.1 漏洞描述 說明內容漏洞編號CVE-2018-2628漏洞名稱Weblogic T3協議反序列化漏洞漏洞評級高危影響范圍Weblogic 10.3.6.0Weblogic 12.1.3.0Webl…

基于JavaWeb+SSM+Vue居住證申報系統小程序的設計和實現

基于JavaWebSSMVue居住證申報系統小程序的設計和實現 源碼獲取入口KaiTi 報告Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 KaiTi 報告 1.1題目背景 隨著時代的發展&#xff0c;人口流動越來越頻繁&#xff0…

生活、工作常用API免費接口

身份證識別OCR&#xff1a;傳入身份證照片&#xff0c;識別照片文字信息并返回&#xff0c;包括姓名、身份證號碼、性別、民族、出生年月日、地址、簽發機關及有效期。二維碼識別OCR&#xff1a;對圖片中的二維碼、條形碼進行檢測和識別&#xff0c;返回存儲的文字內容。銀行卡…

pycharm安裝

1.先去官網下載pycharm 2.下載python3.8 3.修改pip鏡像 4.如果有環境變量沒加的加一下

Gazebo基本使用

參考文章 熟悉Gazebo界面 : ROS自學筆記八&#xff1a;Gazebo 搭建環境&#xff1a;Gazebo仿真環境搭建 搭建環境&#xff0b;加載機器人&#xff1a;gazebo仿真環境搭建配置小車運動仿真

全國農服進萬家系列活動——中國農業生產托管萬里行在河北玉田舉行

12月8日&#xff0c;“全國農服進萬家系列活動-中國農業生產托管萬里行”在河北省玉田縣圓滿舉行。來自全國各地農業農村領域的嘉賓齊聚一堂&#xff0c;交流農業社會化服務典型經驗&#xff0c;共話農業社會化服務高質量發展大事。 原農業部總農藝師、中國合作經濟學會會長孫中…

【戀上數據結構】前綴樹 Tire 學習筆記

Tire 需求分析 如何判斷一堆不重復的字符串是否以某個前綴開頭&#xff1f; 用 Set\Map 存儲字符串&#xff08;不重復&#xff09;遍歷所有字符串進行判斷缺點&#xff1a;時間復雜度 O(n) 有沒有更優的數據結構實現前綴搜索&#xff1f; Tire&#xff08;和 Tree 同音&a…