C++——類數據成員和類成員函數

C++——類數據成員和類成員函數

C++除了有屬於對象的成員——對象成員(或實例成員),還有屬於類本身的一種成員,稱之爲類成員。

使用關鍵字static就可以創建一個類成員。

 

一、       類數據成員

static數據成員在類聲明的內部聲明,在任何程序塊之外定義(注意:不能在構造函數中初始化)。


class Task
{
public:
     //……

private:
	static int n;
};
int Task::n = 0; //定義(初始化)時不受private和protected訪問限制.



初始化爲0不是必須,在任何程序塊之外定義的變量都自動初始化爲0

 

注:不要試圖在頭文件中定義(初始化)靜態數據成員。在大多數的情況下,這樣做會引起重複定義這樣的錯誤。即使加上#ifndef #define #endif或者#pragma once也不行。

static數據成員不會影響該類及其對象的sizeof.

二、       類成員函數

static成員函數只能訪問其他的static成員(類數據成員和類成員函數)。

  

   類成員函數可以爲inline也可以爲非inline

 

    對於static成員的訪問,可以通過對象訪問,也能通過類來訪問。

  


class A
{
public:
	static int x;  //此處只爲說明
	static void Getx();
};


 

 

int main()
{
	A a;
	a.Getx();  //通過對象訪問
	A::Getx(); //通過類訪問
	int m = a.x;
	int n = A::x;
	return 0;
}


三、       在成員函數中定義static變量

如果成員函數中定義了static變量,則該類的所有對象調用該成員函數時將共享這個靜態變量

  

本例在成員函數m中定義了一個static變量s,由於s定義在程序塊內,它擁有程序塊範圍,因此它只能在m內部訪問。每調用m一次,s就會相應地增加一次。又因爲m是C的成員函數,所以,C的所有對象都共享這個靜態局部變量。這樣,對m的每一次調用訪問的都是同一個s。相反,對於非靜態局部變量x來說,每個C對象都擁有一個x。所以,在main中第一次調用c1.m()將s從0增加到1,調用c2.m()將s從1增加到2,第二次調用c2.m()將s從2增加到3。

 



發佈了39 篇原創文章 · 獲贊 59 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章