日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C/Cpp / 类中静态成员变量和普通成员变量的区别

發布時間:2024/10/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/Cpp / 类中静态成员变量和普通成员变量的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2017-12-11 ? ?創建人:Ruo_Xiao

實例代碼:

#include <iostream> class CMan { public:CMan() {}~CMan() {} public:int k_;// 僅僅是聲明。static int i_; };// 定義,申請內存。 int CMan::i_ = 0;int main() {//CMan::k = 15; ?//error: 對非靜態成員“CMan::k”的非法引用CMan::i_ = 10;CMan *p1 = new CMan();CMan *p2 = new CMan();p1->k_ = 15;std::cout << "第一次測試" << "\n";std::cout << "i_ = " << CMan::i_ << "\n";std::cout << "k_ = " << p1->k_ << "\n" << "\n";p2->k_ = 20;CMan::i_ = 30;std::cout << "第二次測試" << "\n";std::cout << "i_ = " << CMan::i_ << "\n";std::cout << "k_ = " << p2->k_ << "\n";std::cin.get();delete p1; p1 = nullptr;delete p2; p2 = nullptr;return 0; }


運行結果:

第一次測試 i_ = 10 k_ = 15第二次測試 i_ = 30 k_ = 20

由上述代碼可知二者的不同:
一、根本點
(1)普通成員變量:在每一個類對象中定義一次,互相直接不受影響。
(2)靜態成員變量:類外定義一次,所有對象共享此內存塊。
二、聲明方式
(1)普通成員變量:int i;
(2)靜態成員變量:static int i;
三、定義位置(內存分配位置)

?1. 普通成員變量 :
?- 若CMan A,則存儲在棧(stack)中;
?
?- 若CMan *pA = new CMan(),則存儲在堆(heap)中 。
?
?2. 靜態成員變量:全局區(靜態區)。
解釋:因為類靜態成員變量不能在類中定義,故只能定義在類外,即存儲位置在全局區(若類中可以定義,則每一個對象都可以為此靜態成員變量申請內存,就不能達到所有對象共享此靜態成員變量的目的)。

四、初始化位置

?1. 普通成員變量:類中,通常在構造函數中。
?2. 靜態成員變量:可以在類中初始化,但需要明白,如果在構造函數中初始化,則每一次申請一個此類的新的對象,此變量都會被重新初始化。所以通常在類外進行一次初始化即可。一般系統缺省初始為0。

五、注意

?1. 靜態成員變量的應用之一就是記錄此類申請了多少個對象(這樣能夠理解這種變量類型的意義了吧)。
?2. 聲明靜態成員變量是需加上關鍵字“static”,定義靜態成員變量時不可加關鍵字“static”。
?3. 靜態成員仍然遵循public,private,protected訪問準則。
?4. 聲明:告訴編譯器,有個某類型的變量將來需要被申請內存。
? ? ?定義:為變量申請內存。
? ?初始化:對已經申請了內存的變量賦一個初始值。
?5. 實例代碼鏈接:http://download.csdn.net/download/itworld123/10154070

總結

以上是生活随笔為你收集整理的C/Cpp / 类中静态成员变量和普通成员变量的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。