C++筆記(六)--- 靜態成員變量/函數(static)

目錄

C語言中靜態變量

C++靜態成員變量

C++靜態成員函數


C語言中靜態變量

1.函數內部用static修飾的變量,只能在此函數使用,但所修飾的變量不隨函數釋放而釋放,下次調用時的值仍為上次結束時的值
2.static修飾的全局變量只能在其定義的文件使用
3.static修飾的函數只能在其所在的文件中被調用

知識點:static修飾的靜態成員變量或成員函數是在編譯鏈接過程中就分配好了內存空間,而普通成員函數是在運行過程中分配空間(根據? 分配空間的時間點? 這個知識點理解下文)

C++靜態成員變量

1.C++類中的成員變量放置在全局靜態變量區
2.C++類中的靜態成員變量可以多個類成員之間數據共享
3.C++類中的成員變量必須在對應的cpp文件中進行定義(類成員函數只是聲明,可以類比C中extern聲明的int變量)
4.C++類中靜態成員變量不能在構建函數中以列表方式初始化
//    a.h文件class A
{
public://    A():i(10){}//錯誤,不能以列表方式初始化靜態成員變量A(){ i = 10; }    //正確void set(int ii) { i = ii; }void print(void) { cout << "A::i = " << i << endl; }
private:static int i;
}//main.cpp文件int A::i;    //類成員變量必須在對應cpp中進行定義,且不能用static修飾。否則與C標準中static修飾變量只能在本文件使用的規則沖突,從而報錯int main(void)
{A a,b;b.set(20);    //成員變量b對i進行賦值a.print();    //最后輸出  A::i = 20, 靜態成員變量可以多個類成員之間數據共享return 0;
}

C++靜態成員函數

1.static成員函數內不能使用this指針
2.static修飾的成員函數只能處理static修飾的成員函數或變量
3.static修飾的成員函數可以在類沒有實例化時調用
class A
{
public:A(){ }void print(void){ cout << "A::print()" << endl;}static void fun(void){cout << "i: " << i << endl;    //正確
//下面錯誤寫法的原因都是 類A未實例化,在內存中未分配空間,導致找不到對應變量或函數
//        cout << "i: " << this->i << endl;    //報錯,“this”: 只能在非靜態成員函數或非靜態數據成員初始值設定項的內部引用
//        print();    //報錯,“A::printf”: 非靜態成員函數的非法調用
//        cout << "k: " << k << endl;    //報錯,對非靜態成員“A::k”的非法引用
//原因,當main函數使用 A::fun()調用此函數時,k并未定義,所以找不到k}
private:static int i;int k;
}int main(void)
{
//    A::print();    //錯誤, 非static成員函數只能實例化后調用A::fun();    //正確,在編譯鏈接時期就對static成員函數分配了空間,可以直接調用return 0;
}

static修飾類實例

1.靜態類實例化時,是在編譯鏈接時就已經分配好空間,但在使用時進行初始化
2.類實例化用static修飾時,它的析構函數在程序執行完成之后執行,而非對應的函數執行完畢
3.多個cpp文件定義static的類實例化時,類的構造函數執行是隨機的
//a.h文件
class A
{
public:A() : i(0){ cout << "A() " << endl; }void print(void) { cout << "A::i = " << i << endl; }
private:int i;
};//b.cpp文件
void b_fun()
{static A bFun;
}//c.cpp文件
void c_fun()
{static A cFun;
}//main.cpp文件
int main(void)
{cout << "Main Begin!" << endl;static A a;a.print();cout << "Main end!" << endl;return 0;
}//b.cpp和c.cpp中的 bFun 和 cFun 的分配內存時間不能確定先后順序

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

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

相關文章

華為OD技術面試案例6-2024年

個人情況&#xff1a;西電本&#xff0c;二戰某985基本寄了。知識儲備方面&#xff1a;無任何408基礎&#xff0c;學校開過數據結構課程60分過&#xff0c;python純靠自學&#xff0c;無任何刷題經驗&#xff0c;無項目經驗&#xff0c;簡歷東拼西湊。 大概是12月底和OD聯系&a…

數據可視化原理-騰訊-熱力圖

在做數據分析類的產品功能設計時&#xff0c;經常用到可視化方式&#xff0c;挖掘數據價值&#xff0c;表達數據的內在規律與特征展示給客戶。 可是作為一個產品經理&#xff0c;&#xff08;1&#xff09;如果不能夠掌握各類可視化圖形的含義&#xff0c;就不知道哪類數據該用…

CSP-201712-2-游戲

CSP-201712-2-游戲 解題思路 初始化變量&#xff1a;定義整數變量n和k&#xff0c;分別用來存儲小朋友的總數和淘汰的特定數字。然后定義了num&#xff08;用來記錄當前報的數&#xff09;和peopleIndex&#xff08;用來記錄當前報數的小朋友的索引&#xff09;。 初始化小朋…

MATLAB環境下基于離散小波變換的體外血管圖像處理

下面簡要介紹小波變換的部分應用。 信號去噪。小波去噪是根據有效信號和噪聲信號在小波變換后表現出的不同特性實現的&#xff0c;一般可用于去除語音、圖像、視頻等中的噪聲信號。小波去噪方法根據對小波系數的非線性處理方式分為三類&#xff0c;分別是小波變換模極大值去噪…

電子電器架構新趨勢 —— 最佳著力點:域控制器

電子電器架構新趨勢 —— 最佳著力點&#xff1a;域控制器 我是穿拖鞋的漢子&#xff0c;魔都中堅持長期主義的汽車電子工程師&#xff08;Wechat&#xff1a;gongkenan2013&#xff09;。 老規矩&#xff0c;分享一段喜歡的文字&#xff0c;避免自己成為高知識低文化的工程師…

備戰藍橋杯---狀態壓縮DP基礎1之棋盤問題

它只是一種手段&#xff0c;一種直觀而高效地表示復雜狀態的手段。 我們先來看一道比較基礎的&#xff1a; 直接DFS是肯定不行&#xff0c;我們發現對某一行&#xff0c;只要它前面放的位置都一樣&#xff0c;那么后面的結果也一樣。 因此我們考慮用DP&#xff0c;并且只有0/…

Vue3+Element-Plus中ELMessage樣式丟失處理

Vu3Element-Plus項目中,element-plus使用按需引入有時會出現樣式失效和在vscode中使用會報錯[找不到名稱“ElMessage”。ts(2304)]錯誤 ELMessage彈框樣式丟失處理方法 使用按需引入就不能手動再引入 import { ElMessage } from "element-plus";ElMessage.success…

藍橋杯-單片機組基礎6——定時計數器與外部中斷混合使用(附小蜜蜂課程代碼)

藍橋杯單片機組備賽指南請查看這篇文章&#xff1a;戳此跳轉藍橋杯備賽指南文章 本文章針對藍橋杯-單片機組比賽開發板所寫&#xff0c;代碼可直接在比賽開發板上使用。 型號&#xff1a;國信天長4T開發板&#xff08;綠板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K6…

常見的瀏覽器跨域解決方法

1. 前端方法&#xff1a;JSONP&#xff08;僅適用于GET請求&#xff09; JSONP&#xff08;JSON with Padding&#xff09;是一種利用<script>標簽的src屬性不受同源策略限制的特性來實現跨域數據請求的方法。JSONP通過在前端動態創建<script>標簽&#xff0c;并將…

4.1.CVAT——目標檢測的標注詳細步驟

文章目錄 1. 進入任務1. 創建任務2. 已創建的task3. 進入標注界面 2. 選擇標注類型2.1 選擇標注類型2.2 進行標注2.3 遮擋 2.快捷鍵3.導出標注結果 1. 進入任務 登錄后會看到如下圖界面&#xff0c;CVAT的標注最小單位是Task&#xff0c;每個Task為一個標注任務。點擊Task按鈕…

[法規規劃]國家數據局局長劉烈宏《激活數據要素價值》演講要點解析

國家數據局黨組書記、局長劉烈宏在北大光華論壇上發表了題為《激活數據要素價值》的演講&#xff0c;當時曾極大推動了市場熱度&#xff0c;引發了行業思考。現在演講過去了一段時間&#xff0c;但是溫故而知新&#xff0c;我們不妨結合演講之后的市場反應&#xff0c;回顧一下…

蚓鏈數字化快速轉型五步

數字化轉型對于許多企業來說是一個頭痛的問題&#xff0c;因為他們可能感到缺乏明確的方向和方法。不過&#xff0c;蚓鏈數字化生態系統提出了一套快速轉型五步法&#xff0c;旨在幫助企業明確目標、建立團隊、設計權益、提供思維和方法&#xff0c;并共享生態資源&#xff0c;…

【java任意文件漏洞修復,使用文件魔數解決】

java任意文件漏洞修復&#xff0c;使用文件魔數解決 背景&#xff1a; 客戶進行滲透測試&#xff0c;驗證上傳文件的程序沒有對上傳文件作任何過濾&#xff0c;導致可以上傳任意文件到服務器&#xff0c;甚至是病毒文件和Webshell木馬文件。 解決辦法&#xff1a;對于上傳的附件…

html基本標簽

<h1></h1> <p></p> h是標簽從h1~h6&#xff0c;沒用h7,h8 p是段落 <a href"https://www.educoder.net">Educoder平臺</a> href可以指定鏈接進行跳轉 <img src"https://www.educoder.net/attachments/download/2078…

【論文精讀】DALLE: Zero-Shot Text-to-Image Generation零樣本文本到圖像生成

文章目錄 一、前言二、摘要三、方法&#xff08;一&#xff09;主要目標&#xff08;二&#xff09;stage 1&#xff1a;訓練離散變分自動編碼器&#xff08;dVAE&#xff09;&#xff08;三&#xff09;stage 2&#xff1a;訓練自回歸轉換器&#xff08;四&#xff09;公式表達…

「優選算法刷題」:最后一塊石頭的重量

一、題目 有一堆石頭&#xff0c;每塊石頭的重量都是正整數。 每一回合&#xff0c;從中選出兩塊 最重的 石頭&#xff0c;然后將它們一起粉碎。假設石頭的重量分別為 x 和 y&#xff0c;且 x < y。那么粉碎的可能結果如下&#xff1a; 如果 x y&#xff0c;那么兩塊石頭…

Flutter開發之CupertinoApp

Flutter開發之CupertinoApp 最近由于使用Flutter編程更多&#xff0c;使用Flutter更順手&#xff0c;相對于其他前端框架來說&#xff0c;Flutter在跨平臺、響應式UI、自繪引擎、即插即用的組件和龐大的社區生態支持方面有更大的優勢&#xff1b;Flutter擁有更低的學習成本&am…

2024牛客寒假算法基礎集訓營5 H sakiko的排列構造(hard)個人補題o(╥﹏╥)o

sakiko要構造一個長度為 nnn 的排列 ppp &#xff0c;使得每一個 pii (1≤i≤n)p_ii\ (1\leq i\leq n)pi?i (1≤i≤n) 都是質數。 排列的定義為&#xff1a;長度為 nnn 的數組&#xff0c;其中 1?n1-n1?n 每個數字在數組中各出現一次。 輸入描述: 第一行輸入一個整數 n(1…

gpt批量工具,gpt批量生成文章工具

GPT批量工具在今天的數字化時代扮演著越來越重要的角色&#xff0c;它們通過人工智能技術&#xff0c;可以自動批量生成各種類型的文章&#xff0c;為用戶提供了便利和效率。本文將介紹5款不同的GPT批量工具&#xff0c;并介紹一款知名的147GPT生成工具&#xff0c;以及另外一款…

c++/c圖的鄰近矩陣表示

#include<iostream> using namespace std;#define MaxVerterNum 100 typedef char VerterType; typedef int EdgeType; typedef struct {VerterType vexs[MaxVerterNum]; // 存儲頂點EdgeType edges[MaxVerterNum][MaxVerterNum]; // 存儲鄰接矩陣int n, e; // 頂點數和邊…