網站首頁 編程語言 正文
一、成員變量的回顧
- 通過對象名能夠訪問 public 成員變量
- 每個對象的成員變量都是專屬的
- 成員變量不能在對象之間共享
二、新的需求
- 統計在程序運行期間某個類的對象數目
- 保證程序的安全性(不能使用全局變量)
- 隨時可以獲取當前對象的數目
下面來看示例:
#include <stdio.h> int gCount = 0; class Test { private: int mCount; public: Test() : mCount(0) { gCount++; } ~Test() { --gCount; } int getCount() { return gCount; } }; Test gTest; int main() { Test t1; Test t2; printf("count = %d\n", gTest.getCount()); printf("count = %d\n", t1.getCount()); printf("count = %d\n", t2.getCount()); return 0; }
輸出結果如下:
雖然這段代碼可以獲得當前定義對象的數量,但是使用了全局變量,不能保證程序的安全性,那么有什么好的辦法呢?且看下面。
三、靜態成員變量
在 C++ 中可以定義靜態成員變量
- 靜態成員變量屬于整個類所有
- 靜態成員變量的生命期不依賴于任何對象
- 可以通過類名直接訪問公有靜態成員變量
- 所有對象共享類的靜態成員變量
- 可以通過對象名訪問公有靜態成員變量
靜態成員變量的特性
- 在定義時直接通過 static 關鍵字修飾
- 靜態成員變量需要在類外單獨分配空間
- 靜態成員變量在程序內部位于全局數據區
語法規則:
Type ClassName:VarName = value;
下面來看一下靜態成員變量的使用:
#include <stdio.h> class Test { private: static int cCount; public: Test() { cCount++; } ~Test() { --cCount; } int getCount() { return cCount; } }; int Test::cCount = 0; Test gTest; int main() { Test t1; Test t2; printf("count = %d\n", gTest.getCount()); printf("count = %d\n", t1.getCount()); printf("count = %d\n", t2.getCount()); Test* pt = new Test(); printf("count = %d\n", pt->getCount()); delete pt; printf("count = %d\n", gTest.getCount()); return 0; }
輸出結果如下:
Test* pt = new Test();
動態在堆空間生成了一個 test 對象,所以會觸發構造函數的調用,所以 count 變成了 4,delete pt; 后 count 就變成 3 了。
四、小結
- 類中可以通過 static 關鍵定義靜態成員變量
- 靜態成員變量隸屬于類所有
- 每一個對象都可以訪問靜態成員變量
- 靜態成員變量在全局數據區分配空間
- 靜態成員變量的生命期為程序運行期
原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/124260197
相關推薦
- 2023-01-26 Android?源碼淺析RecyclerView?Adapter_Android
- 2022-08-20 python3?最常用的三種裝飾器語法匯總_python
- 2023-11-16 python list 刪除列表中某個元素的3種方法;附加刪除numpy數組中的指定索引元素的方法
- 2023-01-26 Redis慢查詢日志與監視器問題_Redis
- 2023-01-27 React?useEffect的理解與使用_React
- 2022-04-18 python?request?post?列表的方法詳解_python
- 2022-05-31 詳解Docker?Compose配置文件參數_docker
- 2022-04-06 關于Redis數據庫三種持久化方案介紹_Redis
- 最近更新
-
- 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同步修改后的遠程分支