網站首頁 編程語言 正文
C++類的三種訪問權限:private、public與protect
類與面向對象
C++中可以定義一個類。
定義一個類,其實就是把一堆實體的共同特征給提取出來。這種面向對象而不是面向過程的解決問題的思想,大大提升了復雜大型軟件的開發效率。
比如在游戲開發中,需要生成一批屬性相近、行為相似的怪物,那我們可以定義一個怪物類:
class Monster { ??? ?private: ?? ??? ?//私有類型成員 ??? ??? ?int attack = 15;?? ?//攻擊力屬性 ??? ?public:?? ??? ??? ?//公有類型成員 ? ?? ? ? ?? ??? ?int health = 100;?? ?//生命值屬性 ??? ??? ?void strike ( ) { //怪物對玩家進行一次攻擊 ??? ??? ?...... ?? ??? ?}?? ? ??? ??? ?void recover( ) { //怪物回血,并提高自身攻擊力 ??? ??? ??? ?if (health <= 95) health += 5; ? ?? ??? ??? ?attack += 5; ?? ??? ?}??
我們知道,一個類中可以有兩種成員在里面:類中成員變量和類中成員函數。成員變量用于描述類的靜態屬性,如上述的 health 和 attack;成員函數其實就是類的動態行為,比如上述的strike()和recover()。
補充一下:函數,本質上一串能夠完成特定行為的代碼。
例如其中strike()可以使怪物對玩家造成傷害(改變玩家生命值);recover()可以恢復一定量的生命值并提高攻擊力。
如果想要增加游戲難度,則可以增加怪物類中strike()和recover()調用頻率,或者提高health和attack的初始值,這些操作在C++中都很容易做到。這種面向對象的編程思想,讓一些從面向過程的角度看來十分抽象的行為,都能夠用C++比較輕松地實現。
那么,如此便夠了么?僅僅用成員變量和成員函數便可以完成許多復雜操作,我們不應該竊喜么?
三種訪問權限
private與public
上述代碼中的 private 和 public 是怎么回事?他們的存在有什么意思?
-
private
代表類內私有成員,僅有類內函數可以訪問private,類外一切函數(包括繼承者)均不可訪問private成員。 -
public
代表類內公有成員,無論類內還是類外(包括繼承者)的函數都可以訪問public成員。
通過這兩個關鍵字,我們實現了對類內成員的訪問權限控制。在一些特定情況下,訪問權限控制十分方便。比如在上述代碼中,我們將怪物的攻擊力attack設置為private,這樣就只有類內的recover()函數能夠訪問attack屬性;將生命值health設置為public,于是當玩家對怪物進行攻擊時,health也能被玩家類player的攻擊函數訪問而減小。
- 除此以外,還有另一個關鍵字
protect
(即保護成員),主要用在類的繼承中。如果有任何變量或函數被聲明為protect,那么這些保護成員可以被類的繼承者中成員函數訪問,而無法被類外任何函數訪問。因為這個關鍵字涉及繼承機制,稍微有點復雜,所以我們留到下次。
關于類的訪問權限(控制權限)的區別
C++中類的訪問權限有三種,分別是public公共權限,protected保護權限,private私有權限。將成員屬性和成員方法放到不同的訪問權限中加以實際控制。
三種成員控制權限的區別
- 在公共權限內的成員類內可以訪問,類外也可以訪問。
- 在保護權限內的成員類內可以訪問,類外不可以訪問。
- 在私有權限內的成員類內可以訪問,類外不可以訪問。
代碼示例
#include <iostream> using namespace std; class peo { public: ? ? ? ? ? ? ? ?//公共權限 類內類外可以訪問 ?? ?string name; protected: ? ? ? ? ? ? //保護權限,類內可以訪問,類外不可以訪問 ?? ?string House; private: ? ? ? ? ? ? ? //私有權限,類內可以訪問,類外不可以訪問 ?? ?string car; public: ?? ?void lei() { ?? ??? ?name = "老張"; ?? ??? ?House = "張家"; ? ? ? ?//保護權限的類內訪問 ?? ??? ?car = "長城"; ? ? ? ? ?//私有權限的類內訪問 ?? ?} }; ? int main() { ?? ?peo p; ?? ?p.name = "小張"; ? ? ? ? ? ? ? ? ?? ??? ?//p.house="小張家"; 保護權限類外不可以訪問 ?? ??? ?//p.car="長城plus"; 私有權限類外不可以訪問 ? ?? ??? ?return 0; }
小結一下:通過對不同成員控制權限的了解和使用,在實際項目中可以根據自己的需求選擇相應的權限并寫上相應的接口對類內成員進行調用。
總結
原文鏈接:https://blog.csdn.net/weixin_51268298/article/details/122569959
相關推薦
- 2022-06-22 Python實現npy/mat文件的保存與讀取_python
- 2022-10-19 python類參數定義及數據擴展方式unsqueeze/expand_python
- 2022-05-18 ASP.NET?Core?6框架揭秘實例演示之如何承載你的后臺服務_實用技巧
- 2022-02-12 android button的圓角邊框及點擊效果實現
- 2022-11-29 Android?Handler?runWithScissors?梳理流程解析_Android
- 2023-04-07 React?Mobx狀態管理工具的使用_React
- 2022-09-16 C#中Path類的使用方法_C#教程
- 2022-10-10 Android開發之permission動態權限獲取詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支