有時候我們希望在多個物件之間共享資料,物件 a 改變了某資料後物件 b 可以檢測到。共享資料的典型使用場景是計數
以 student 類為例,如果我們想知道班級中共有多少名學生,就可以設定乙份共享的變數,每次建立物件時讓該變數加 1
在c++中,我們可以使用靜態成員變數來實現多個物件共享資料的目標。靜態成員變數是一種特殊的成員變數,它被關鍵字static修飾
#include #include完整的例子:計數功能using
namespace
std;
class
student
public
:
static
int m_total; //
靜態成員變數
/*static 成員變數屬於類,不屬於某個具體的物件,即使建立多個物件,也只為 m_total 分配乙份記憶體,所有物件使用的都是這份記憶體中的資料。當某個物件修改了 m_total,也會影響到其他物件
static 成員變數必須在類宣告的外部初始化:
格式:變數型別 類名::變數名 = 初始化值;
static 成員變數和普通的 static 變數類似,都在記憶體分割槽中的全域性資料區分配記憶體
*/private
:
string
m_name;
intm_age;
};int student::m_total = 0; //
初始化靜態成員變數
//靜態成員變數在初始化時不能再加 static,但必須要有資料型別。被 private、protected、public 修飾的靜態成員變數都可以用這種方式初始化
//注意:static 成員變數的記憶體既不是在宣告類時分配,也不是在建立物件時分配,而是在(類外)初始化時分配。反過來說,沒有在類外初始化的 static 成員變數不能使用
intmain()
#include #includeusing
namespace
std;
class
student
public
:
static
intm_total;
private
:
string
m_name;
intm_age;
};int student::m_total = 0
;int
main()
#include usingnamespace
std;
class
a
static
const
int spec=10; //對};
//int a::spec = 10; //錯
/*上面兩處錯誤原因:修飾符static只能在類外初始化,修飾符const(引用、類物件)只能用初始化列表初始化,兩者相互矛盾
解決辦法:只能在宣告時初始化
C static靜態成員變數詳解
class student 物件的記憶體中包含了成員變數,不同的物件占用不同的記憶體 已在 c 物件的記憶體模型 中提到 這使得不同物件的成員變數相互獨立,它們的值不受其他物件的影響。例如有兩個相同型別的物件 a b,它們都有乙個成員變數 m name,那麼修改 a.m name 的值不會影響 b....
C static靜態成員
class a a void fun 普通成員函式 static void printnum 靜態成員函式 private int m a 普通成員變數 int m b 普通成員變數 static int num 靜態成員變數 靜態成員必須在定義類的檔案中對靜態成員變數進行初始化,否則會編譯出錯。i...
C static 靜態成員
靜態成員包括靜態資料成員和靜態成員函式,提供了同類物件間資料成員的共享機制 靜態成員不是某個物件的成員,是類所有物件的共享成員,只建立乙個成員副本 定義格式 static 型別 成員名 引用格式 類名 靜態成員 初始化格式 型別 類名 靜態資料成員 初始化值 靜態資料成員為同類所有物件所共享,不能使...