c++——靜態成員變量、靜態成員函數和const修飾的靜態成員變量

一、c++靜態成員變量

在C++中,靜態成員變量(Static Member Variable)是類的一種特殊類型的成員變量,它被類的所有實例共享,而不是每個實例都有自己的副本。靜態成員變量在類的所有對象之間保持唯一的狀態,具有一些特殊的用途和語法。

1、概念:

靜態成員變量是類的成員變量,但不是依賴于類的實例而存在的。它在類的所有實例之間共享相同的內存位置,因此在類的所有對象之間保持唯一的狀態。
靜態成員變量在類的聲明中使用static關鍵字來定義,并在類的實現文件中進行初始化換句話說就是不能在類中進行初始化)。

2、使用方法:

①、聲明靜態成員變量:
在類的聲明中,使用static關鍵字聲明靜態成員變量。聲明通常在類的public、private或protected部分。

②、初始化靜態成員變量:(不能在類里面進行初始化)
靜態成員變量需要在類的實現文件中進行初始化。在類外部,使用類名和作用域解析操作符::來初始化靜態成員變量。

③、訪問靜態成員變量:
靜態成員變量不屬于類的實例,因此可以使用類名和作用域解析操作符來訪問,也可以在類的成員函數中通過this指針訪問。

案例:

#include <iostream>
using namespace std;
class MyClass {public:/**聲明靜態成員變量*靜態成員變量在編譯階段就已經分配了內存,存在全局靜態區*/static int staticVar;MyClass() {// 在構造函數中修改靜態成員變量staticVar++;}// 靜態成員函數,用于訪問靜態成員變量static void printStaticVar() {cout << "Static variable value: " << staticVar << endl;}
};// 初始化靜態成員變量
int MyClass::staticVar = 0;//在類外初始化int main() {MyClass obj1;MyClass::printStaticVar();  // 訪問靜態成員變量MyClass obj2;MyClass::printStaticVar();  // 訪問靜態成員變量return 0;
}

3、總結

在這里插入圖片描述
①靜態成員變量在內存中只有一份,多個對象共享一個靜態變量
②靜態成員變量,必須類內聲明,類外定義
③靜態成員變量可以通過類的作用域訪問
④靜態成員變量可以通過類的對象訪問

二、靜態成員函數

1、概念:

靜態成員函數(Static Member Function):
靜態成員函數是不依賴于類的實例的成員函數。它們可以通過類名和作用域解析操作符::直接訪問。靜態成員函數不能訪問非靜態成員變量,也不能使用this指針。

2、特點:

①靜態成員函數能訪問靜態成員變量不能訪問普通的成員變量
②可以通過類的作用域訪問靜態成員函數
③可以通過對象訪問靜態成員函數

案例代碼

#include <iostream>
using namespace std;
class MyClass {private:int regularVar;        // 普通成員變量static int staticVar;  // 靜態成員變量public:MyClass(int regValue, int statValue) : regularVar(regValue) {staticVar = statValue;}static void staticFunction() {// 靜態成員函數可以訪問靜態成員變量,但不能訪問普通成員變量cout << "Static member function accessing staticVar: " << staticVar<< endl;// 下面一行會引發編譯錯誤,因為靜態函數不能訪問普通成員變量// cout << "Static member function accessing regularVar: " <<// regularVar << endl;}void regularFunction() {cout << "Regular member function accessing regularVar: " << regularVar<< endl;}
};// 初始化靜態成員變量
int MyClass::staticVar = 0;int main() {// 使用類的作用域訪問靜態成員函數MyClass::staticFunction();MyClass obj(42, 100);obj.regularFunction();// 通過對象訪問靜態成員函數obj.staticFunction();  // 也可以通過對象訪問,但是不推薦,最好使用類名訪問return 0;
}

三、const修飾的靜態成員變量

①const修飾的靜態成員變量保存在常量區,只讀的,在內存中只有一份
②const修飾的靜態成員變量可以在類內定義且初始化
③const修飾的靜態成員變量可以通過類的作用域訪問
④const修飾的靜態成員變量可以通過對象訪問
⑤靜態成員函數可以訪問const修飾的靜態成員變量

代碼案例:

#include <iostream>
using namespace std;class MyClass {public:// 在類內部定義且初始化帶有const修飾的靜態成員變量static const int staticConstVar = 42;static void printStaticConstVar() {// 靜態成員函數可以訪問const修飾的靜態成員變量cout << "Static const variable value: " << staticConstVar << endl;}
};int main() {// 通過類的作用域訪問const修飾的靜態成員變量cout << "Accessing via class scope: " << MyClass::staticConstVar << endl;// 通過對象訪問const修飾的靜態成員變量MyClass obj;cout << "Accessing via object: " << obj.staticConstVar << endl;// 調用靜態成員函數,訪問const修飾的靜態成員變量MyClass::printStaticConstVar();return 0;
}

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

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

相關文章

MySQL 中文全文檢索

創建索引&#xff08;MySQL 5.7.6后全文件索引可用WITH PARSER ngram&#xff0c;針對中文&#xff0c;日文&#xff0c;韓文&#xff09; ALTER TABLE 表 ADD FULLTEXT 索引名 (字段) WITH PARSER ngram;或者CREATE FULLTEXT INDEX 索引名 ON 表 (字段) WITH PARSER ngram; …

Redisson實現分布式鎖示例

一、引入依賴 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.0</version></dependency>二、配置類 import org.redisson.Redisson; import org.redisson.api.RedissonClient;…

使用opencv進行文本增強

文本增強: import cv2 import numpy as np# 讀取圖像 image = cv2.imread(E:/image.jpg, cv2.IMREAD_GRAYSCALE)# 二值化圖像 _, binary_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 膨脹操作 kernel = np.ones((3, 3), np.uint8) dilated_…

Python Flask藍圖使用

使用示例&#xff1a; user.py from utils.sql import supabase from flask import Blueprint,request, session from utils.entity import r user_bp Blueprint(user, __name__, url_prefix/user)"""----------------------------------------API: 用戶登錄…

Hadoop學習:深入解析MapReduce的大數據魔力(三)

Hadoop學習&#xff1a;深入解析MapReduce的大數據魔力&#xff08;三&#xff09; 3.5 MapReduce 內核源碼解析3.5.1 MapTask 工作機制3.5.2 ReduceTask 工作機制3.5.3 ReduceTask 并行度決定機制 3.6 數據清洗&#xff08;ETL&#xff09;1&#xff09;需求2&#xff09;需求…

uni-app封裝api請求

前端封裝api請求 前端封裝 API 請求可以提高代碼的可維護性和重用性&#xff0c;同時使得 API 調用更加簡潔和易用。 下面是一種常見的前端封裝 API 請求的方式&#xff1a; 創建一個 API 封裝模塊或類&#xff1a;可以使用 JavaScript 或 TypeScript 創建一個獨立的模塊或類來…

Java數據庫連接池原理及spring boot使用數據庫連接池(HikariCP、Druid)

和線程池類似&#xff0c;數據庫連接池的作用是建立一些和數據庫的連接供需要連接數據庫的業務使用&#xff0c;避免了每次和數據庫建立、銷毀連接的性能消耗&#xff0c;通過設置連接池參數可以防止建立連接過多導致服務宕機等&#xff0c;以下介紹Java中主要使用的幾種數據庫…

【學習FreeRTOS】第11章——FreeRTOS中任務相關的其他API函數

1.函數總覽 序號函數描述1uxTaskPriorityGet()獲取任務優先級2vTaskPrioritySet()設置任務優先級3uxTaskGetNumberOfTasks()獲取系統中任務的數量4uxTaskGetSystemState()獲取所有任務的狀態信息5vTaskGetInfo()獲取單個任務的狀態信息6xTaskGetCurrentTaskHandle()獲取當前任…

Excel自動化辦公——Openpyxl的基本使用

Excel自動化辦公——Openpyxl的基本使用 個人感覺&#xff0c;相比Pandas&#xff0c;openpyxl對Excel的操作更為細致&#xff0c;Pandas則更適用于統計計算&#xff1b; 01 基本環境02 Excel數據讀取操作03 案例04 向Excel寫入數據05 表數據定向修改06 單元格樣式制定07 單元…

原型對象的簡單了解

在前面學習java有一個概念叫做繼承&#xff0c;方便我們對父類方法、變量等的調用。對前端的學習我們需要讓對象可以訪問和繼承其他對象的屬性和方法&#xff0c;就需要了解原型對象&#xff0c;以及原型鏈。 一、原型 構造函數通過原型分配的函數是所有對象所共享的。每一個構…

【Lua語法】算術、條件、邏輯、位、三目運算符

1.算術運算符 加減乘除取余&#xff1a; - * / % Lua中獨有的&#xff1a;冪運算 ^ 注意&#xff1a; 1.Lua中沒有自增自減(、–)&#xff0c;也沒有復合運算符(、-) 2.Lua中字符串可以進行算術運算符操作&#xff0c;會自動轉成number 如&#xff1a;“10.3” 1 結果為11.3…

回歸預測 | MATLAB實現SOM-BP自組織映射結合BP神經網絡多輸入單輸出回歸預測(多指標,多圖)

回歸預測 | MATLAB實現SOM-BP自組織映射結合BP神經網絡多輸入單輸出回歸預測&#xff08;多指標&#xff0c;多圖&#xff09; 目錄 回歸預測 | MATLAB實現SOM-BP自組織映射結合BP神經網絡多輸入單輸出回歸預測&#xff08;多指標&#xff0c;多圖&#xff09;效果一覽基本介紹…

【css動畫】向下的動態箭頭

前言 使用css實現一組向下的動態箭頭效果&#xff0c;如下圖 思路 1.使用svg畫箭頭 2.設置keyframes&#xff0c;主要是每個箭頭加不同的延時。 代碼 <div class"down-arrow"><svg id"more-arrows"><polygonclass"arrow-top&quo…

Spark第三課

1.分區規則 1.分區規則 shuffle 1.打亂順序 2.重新組合 1.分區的規則 默認與MapReduce的規則一致,都是按照哈希值取余進行分配. 一個分區可以多個組,一個組的數據必須一個分區 2. 分組的分區導致數據傾斜怎么解決? 擴容 讓分區變多修改分區規則 3.HashMap擴容為什么必須…

[JavaWeb]【七】web后端開發-MYSQL

前言&#xff1a;MySQL是一種流行的關系型數據庫管理系統,它的作用是存儲和管理數據。在Web開發中,MySQL是必備的數據庫技能之一,因為它可以幫助Web開發人員處理大量的數據,并且提供了強大的數據查詢和管理功能。 一 數據庫介紹 1.1 什么是數據庫 1.2 數據庫產品 二 MySQL概述…

Servlet+JDBC實戰開發書店項目講解第六篇:訂單實現

ServletJDBC實戰開發書店項目講解第六篇&#xff1a;訂單實現 1. 數據庫設計 在訂單實現之前&#xff0c;我們需要對數據庫進行相應的設計。在這個書店項目中&#xff0c;我們可以創建以下兩個表來實現訂單功能&#xff1a; 1.1 訂單表(Order) 訂單ID(order_id)&#xff1a…

vue3 實現簡單瀑布流

一、整理思路 實際場景中&#xff0c;瀑布流一般由 父組件 提供 數據列表&#xff0c;子組件渲染每個圖片都是根據容器進行 絕對定位 &#xff0c;從而定好自己的位置取出 屏幕的寬度&#xff0c;設定 圖片的寬度 固定 為一個值&#xff0c;計算可以鋪 多少列按列數 先鋪上第一…

使用Julia進行核遞歸最小二乘算法(KRLS)的解析與實現

F 標題&#xff1a; 使用Julia進行核遞歸最小二乘算法&#xff08;KRLS&#xff09;的深度解析與實現 第一部分&#xff1a; 核遞歸最小二乘算法 (KRLS) 是一個在線核回歸算法&#xff0c;這種算法的主要特點是能夠一次處理一個樣本&#xff0c;并構建一個訓練點字典&#xf…

5G科技防汛,助力守護一方平安

“立秋雖已至&#xff0c;炎夏尚還在”&#xff0c;受臺風席卷以及季節性影響全國多地正面臨強降水的嚴峻挑戰。“落雨又順秋&#xff0c;綿綿雨不休”&#xff0c;正值“七下八上” 防汛關鍵時期&#xff0c;貴州省水文水資源局已全面進入備戰狀態。 為確保及時響應做好防汛搶…

Vue3 setup新特性簡單應用

去官網學習→組合式 API&#xff1a;setup() | Vue.js 運行示例&#xff1a; 代碼&#xff1a;App.vue <template><div class"home"><img alt"Vue logo" src"../assets/logo.png"><!-- msg 組件傳遞數據 --><Hell…