C++語法 | static靜態|單例模式

這里寫目錄標題

  • static 關鍵字
      • 靜態局部變量 vs 局部變量
      • 靜態全局變量 vs 全局變量
      • 靜態成員變量 vs 成員變量
      • 靜態成員函數
  • 單例模式

static 關鍵字

在此之前, 先了解一下 static 關鍵字

靜態局部變量 vs 局部變量

在靜態局部變量中,變量不會在函數調用結束后銷毀,值會保留
變量在函數調用結束后依然存在。

所以每個函數訪問的都是同一個 count 。但如果該函數是int count = 0; counter()將都是“函數已被調用1次”

#include <iostream>
using namespace std;void counter() {// 靜態局部變量 - 在函數調用之間保持值static int count = 0;count++; // 每次調用增加計數cout << "函數已被調用 " << count << " 次" << endl;
}int main() {counter(); // 輸出: 函數已被調用 1 次counter(); // 輸出: 函數已被調用 2 次counter(); // 輸出: 函數已被調用 3 次return 0;
}

.
.
.

靜態全局變量 vs 全局變量

靜態全局變量 - 只能在當前文件訪問
而全局變量 是任何文件都可以訪問的

#include <iostream>
using namespace std;// 靜態全局變量 - 只能在當前文件訪問
static int counter = 0;void increment() {counter++;cout << "計數器值: " << counter << endl;
}int main() {increment(); // 輸出: 計數器值: 1increment(); // 輸出: 計數器值: 2increment(); // 輸出: 計數器值: 3return 0;
}

.
.
.
.

靜態成員變量 vs 成員變量

基本上等同與靜態局部變量 與 局部變量:)

#include <iostream>
using namespace std;class Counter {
public:// 靜態成員變量聲明static int count;Counter() {count++; // 每次創建對象時增加計數}
};// 靜態成員變量定義和初始化(必須在類外)
int Counter::count = 0;int main() {cout << "初始計數: " << Counter::count << endl; // 0Counter obj1;cout << "創建obj1后: " << Counter::count << endl; // 1Counter obj2;cout << "創建obj2后: " << Counter::count << endl; // 2}

.
.
.
.

靜態成員函數

就是專門用來操作靜態成員變量的,函數的返回值就是靜態局部變量
靜態局部變量的作用你懂吧?
只用打出一個商標,后面的都是用同一個商標,這就是單例模式最重要的一點

static Singleton* getInstance(){ return &instance;}

.
.
.
.

單例模式

這里只討論線程安全下的懶漢模式

class Singleton
{
public:static Singleton* getInstance()    // 靜態成員方法  #2{static Singleton instance;					// 靜態局部變量    #3return &instance; 									//返回一個靜態局部變量的地址   #4}private:Singleton() { cout << "Singleton()" << endl; }	  //私有的構造函數  #1~Singleton() { cout << "~Singleton()" << endl; }Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;
};int main()
{Singleton* p1 = Singleton::getInstance(); Singleton* p2 = Singleton::getInstance(); Singleton* p3 = Singleton::getInstance();cout << p1 << endl;cout << p2 << endl;cout << p3 << endl;return 0;
}

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

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

相關文章

KEDA/HPA/VPA 三件套:ABP 后臺作業的事件驅動伸縮

&#x1f680; KEDA/HPA/VPA 三件套&#xff1a;ABP 后臺作業的事件驅動伸縮 &#x1f4da; 目錄&#x1f680; KEDA/HPA/VPA 三件套&#xff1a;ABP 后臺作業的事件驅動伸縮0. TL;DR ?1. 背景與目標 &#x1f3af;2. 架構與協作機制 &#x1f9e9;2.1 系統總覽&#xff08;組…

webRTc 為何深受直播實現的青睞?

WebRTC(Web Real-Time Communication)之所以在直播場景中備受青睞,核心原因在于它天然契合了現代直播對低延遲、實時互動、跨平臺兼容性的核心需求,同時大幅降低了實時音視頻開發的門檻。具體來說,其優勢體現在以下幾個方面: 1. 超低延遲,滿足實時互動需求 傳統直播協…

HarmonyOS迷宮游戲鴻蒙應用開發實戰:從零構建隨機迷宮游戲(初版)

在鴻蒙應用開發中&#xff0c;游戲類應用能很好地鍛煉 UI 布局、狀態管理與邏輯交互能力。本文將以一個隨機迷宮游戲為例&#xff0c;詳細拆解從首頁設計到迷宮生成、角色控制、通關判定的完整開發流程&#xff0c;帶你掌握 ArkUI 框架的核心應用技巧。一、項目整體架構本次開發…

石頭科技出海升級:全球電商業財一體化與OMS實踐

石頭科技作為智能清潔設備領域的獨角獸&#xff0c;2023 年海外收入占比超過 60%&#xff0c;產品銷往全球 60 多個國家。然而&#xff0c;智能硬件出海的復雜性&#xff0c;讓企業在業財管理上面臨前所未有的挑戰。智能硬件業財痛點 產品生命周期管理&#xff1a;研發、生產到…

《URP管線中后處理效果的創新應用與優化實踐》

硬件性能的飛速提升與玩家對畫面品質的高要求形成了相互推動的態勢,而渲染效果作為游戲視覺體驗的核心載體,直接決定了玩家對游戲的第一印象與沉浸感。后處理效果作為URP管線的“點睛之筆”,通過在渲染流程末尾對最終圖像進行二次加工,能夠模擬真實世界的光學現象(如光線散…

【Java 底層】JVM 垃圾回收機制深度剖析:從對象生死判定到收集器實戰

【Java 底層】JVM 垃圾回收機制深度剖析&#xff1a;從對象生死判定到收集器實戰 【Java 底層】JVM 垃圾回收機制深度剖析&#xff1a;從對象生死判定到收集器實戰 Java 之所以被稱為 “開發效率利器”&#xff0c;很大程度上得益于其自動內存管理機制 —— 開發者無需手動分配…

網絡問題排查

網絡連通性測試&#xff1a;ping ip持續性監測&#xff1a;ping -t ipnetstat 可以查看網絡連接狀態&#xff0c;可以看到顯示系統的網絡連接&#xff0c;路由表&#xff0c;接口等信息。netstat -nult 回車-t:顯示的是tcp的連接-u:顯示udp的連接-l:只顯示監聽狀態的端口-n:顯示…

tuple/dict/list 這三個數據類型在取值時候的區別

tuple&#xff08;元組&#xff09;、dict&#xff08;字典&#xff09;、list&#xff08;列表&#xff09;在取值時的區別。 1. list&#xff08;列表&#xff09; &#x1f449; 列表就是“一串有順序的東西”&#xff0c;像排隊的人。 取值方式&#xff1a;用 下標&#xf…

深度解析大模型服務性能評測:AI Ping平臺助力開發者精準選型MaaS服務

深度解析大模型服務性能評測&#xff1a;AI Ping平臺助力開發者精準選型MaaS服務 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff…

OpenCV物體跟蹤:從理論到實戰的全面解析

? 一、引言? 在計算機視覺的廣闊領域中&#xff0c;物體跟蹤技術宛如一顆璀璨的明星&#xff0c;散發著獨特的魅力與價值&#xff0c;發揮著舉足輕重的作用。它致力于在連續的圖像幀或視頻序列里&#xff0c;精準識別并持續定位特定的目標物體&#xff0c;這一過程看似簡單…

【Python】OS模塊操作目錄

1、概述os模塊是一個Python內置的操作目錄和查看系統基礎信息的模塊&#xff0c;可用于讓我們對目錄進行批量操作&#xff0c;其中包括&#xff1a;查看系統信息&#xff08;環境變量、分隔符、換行符等&#xff09;&#xff0c;對目錄進行創建、刪除、重命名、查看目錄內容等&…

JavaScript中 i++ 與 ++i

在 JavaScript 編程中&#xff0c;i&#xff08;前置自增&#xff09;和i&#xff08;后置自增&#xff09;是兩個常用但極易混淆的運算符。它們看似都能實現變量自增 1 的功能&#xff0c;但其執行時機和返回值的差異&#xff0c;常常導致開發者在實際編碼中出現邏輯錯誤。本文…

fastapi 中間件的使用

1. 中間件基礎結構from starlette.middleware.base import BaseHTTPMiddlewareclass RequestLoggerMiddleware(BaseHTTPMiddleware):async def dispatch(self, request: Request, call_next):# 1. 請求處理前邏輯# 2. 調用后續處理response await call_next(request)# 3. 響應…

網絡白菜包子手動安裝 Arch Linux

大家好&#xff01;我是大聰明-PLUS&#xff01;針對初學者的 Arch Linux 安裝詳細教程。我曾經花了不少時間才搞清楚安裝過程。本文旨在提供一種“捷徑”&#xff0c;讓每個人都能輕松上手&#xff0c;無論他們是否有 Linux 使用經驗。Arch 的主要特點是極其靈活的系統配置&am…

Linux學習筆記(五)--Linux基礎開發工具使用

在Linux中軟件包通常是指一個包含了軟件程序、元數據、依賴關系信息和安裝腳本的壓縮文件??。因為在Linux上如果沒有軟件包管理器,那么想要下載軟件會非常麻煩,不僅需要自己去手動編譯和安裝,而且難以卸載和管理,所以軟件包的出現解決了這些問題.軟件包一般是由程序文件(編譯…

數據結構(陳越,何欽銘) 第十講 排序(下)

10.1 快速排序 10.1.1 算法概述10.1.2 選主元10.1.3 子集劃分10.1.4 算法實現10.2 表排序 10.2.1 算法概述10.2.2 物理排序10.3 基數排序 10.3.1 桶排序10.3.2 基數排序10.3.3 多關鍵字的排序10.4 排序算法的比較

vue 使用print.js 打印文本,HTML元素,圖片,PDF

vue 使用print.js 打印文本,HTML元素,圖片,PDF 安裝 npm install print-js --save示例 <template><div class"print-example"><h2>Print.js 打印示例</h2><!-- 打印區域 --><div id"printableArea" class"printable…

jenkins審批機器人功能概述-Telegram版

Jenkins審批機器人 - 功能概述 代碼鏈接&#xff0c;私聊可得 項目簡介 Jenkins審批機器人是一個集成Jenkins CI/CD流程的自動化審批系統&#xff0c;通過Telegram機器人提供便捷的發布審批功能。該系統支持多環境部署審批、用戶權限管理、構建結果通知等完整的DevOps審批流程。…

Rust : 關于解引用“*”

關于解引用*操作符&#xff0c;謹供參考&#xff01; 一、主要代碼 use std::ops::Deref; fn main() {model_1();model_2();model_3();model_4();model_5();model_6();model_7();model_8();model_9(); }二、*操作符與常見的引用和解引用 fn model_1(){let reference:&St…

【高級終端Termux】在安卓手機/平板上使用Termux 搭建 Debian 環境并運行 PC 級 Linux 應用教程(含安裝WPS,VS Code)

Termux 搭建 Debian 環境并運行 PC 級 Linux 應用教程 一、前言 1. 背景 眾所周知&#xff0c;最新搭載澎湃OS和鴻蒙OS的平板都內置了PC級WPS&#xff0c;辦公效率直接拉滿&#xff08;板子終于從“泡面蓋”升級為“生產力”了&#xff09;。但問題來了&#xff1a;如果不是這…