static修飾區域性變數
static修飾全域性變數 二、c++ 中的static關鍵字(類中的static關鍵字)1、static 資料成員在類內資料成員的宣告前加上關鍵字static,該資料成員就是類內的靜態資料成員。#include using namespace std;
class myclass ;
int myclass::sum = 0; //定義並初始化靜態資料成員
//static int myclass::sum = 0; //注意加static, 是錯誤的
myclass::myclass(int a, int b, int c)
void myclass::getsum()
int main()
輸出結果:
可以看出,static資料成員有以下特點:
(1). 對於非static資料成員,每個類物件都有自己的拷貝。而static資料成員被當作是類的成員。無論這個類的物件被定義了多少個,靜態資料成員在程式中也只有乙份拷貝,由該型別的所有物件共享訪問
(2). 靜態資料成員儲存在全域性資料區。靜態資料成員定義時才分配空間,所以不能在類宣告中定義。
在上例中,語句 int myclass::sum = 0; 是定義靜態資料成員;
(3). 靜態資料成員和普通資料成員一樣遵從public, protected, private 訪問規則;除了定義,定義不要管訪問規則。
(4). 因為靜態資料成員在全域性資料區分配記憶體,屬於本類的所有物件共享,所以,它不屬於特定的類物件,在沒有產生類物件時其作用域就可見,即在沒有產生類的例項時,我們就可以操作它
(5). 靜態資料成員初始化與一般資料成員初始化不同。靜態資料成員初始化的格式為:
//<資料型別><類名>::<靜態資料成員名>=<值>
int myclass::sum=0;
(6). 類的靜態資料成員有兩種訪問形式:
//<類物件名>.<靜態資料成員名>
m.sum = 0
//<類型別名>::<靜態資料成員名>
myclass::sum = 0
(7). 靜態資料成員主要用在各個物件都有相同的某項屬性的時候。比如對於乙個存款類,每個例項的利息都是相同的。所以,應該把利息設為存款類的靜態資料成員。這有兩個好處,第一,不管定義多少個存款類物件,利息資料成員都共享分配在全域性資料區的記憶體,所以節省儲存空間。第二,一旦利息需要改變時,只要改變一次,則所有存款類物件的利息全改變過來了;
2、static 成員函式
static 成員函式,它為類的全部物件服務而不是為某乙個類的具體物件服務。普通的成員函式一般都隱含了乙個this指標,但靜態成員函式由於不是與任何的物件相聯絡,因此它不具有this指標。從這個意義上講,它無法訪問屬於類物件的no-static資料成員,也無法訪問no-static成員函式,它只能呼叫其餘的靜態成員函式。
#include using namespace std;
class myclass ;
int myclass::sum = 0;//定義並初始化靜態資料成員
myclass::myclass(int a, int b, int c)
//static void myclass::getsum() //加上static是錯誤的
void myclass::getsum() //靜態成員函式的實現
{ //cout關於靜態成員函式,可以總結為以下幾點:
m.getsum();myclass::getsum();
// 呼叫類的靜態成員函式。
Static關鍵字的用法
一 如果想不建立乙個類的例項物件就訪問改類的變數或方法,可以在改變量或方法前 static關鍵字 class man static string 男 string name public showname system.out.println name class call public stati...
static關鍵字的用法
static 靜態變數 1 static 修飾乙個屬性,放在方法區裡面 公共的區域 是類變數,隨著類的載入而載入static變數,該變數只有乙份,2 靜態資料不屬於物件,屬於類。3 static修飾方法 用類名呼叫。4 靜態物件的資料在全域性是唯一的,一改都改。如果你想要處理的東西是整個程式中唯一的...
static關鍵字的用法
a static方法就是沒有this的方法,在static方法體中,不能呼叫非static方法,同時也不能呼叫非靜態成員變數 反過來是可以的,即在非static方法體中,可以呼叫static方法。static方法,僅僅通過類名的方式呼叫。當然如果 你用例項化的物件去呼叫static方法,也是可以的,...