類static成員
類static成員引進:有時特定類的全體對象需要訪問一個全局對象。
★為什么用static成員而不是全局對象?
---- static對象名字在類作用域中,可以有效避免命名沖突,并且清晰顯示程序意圖。
---- 可以實施封裝(static成員可以定義為private,而全局對象不可以)
★ 如何調用? ---- class A a; A::static_mem; a.static_mem;
★ 聲明和定義
---- static成員函數在類定義體內部外部定義均可。在類定義體外定義時不加(不可以加)static修飾。
---- static數據成員必須在類定義體外部定義(正好一次)(在類定義體外聲明并定義)
class A{public : static int n;} int A::n = 10;
---- const static數據成員可以(也可以不)在類定義內初始化,但必須在類定義體外部重新聲明(不可以加static修飾符,不可以賦初值)
★ static數據成員其他特性:
----一般地,在類的內部不能有該類類型的變量(或函數形參),最多只能有該類類型的指針或引用做變量類型(或函數形參). static數據成員則不受這個限制。
---- 類的static數據成員可以作為函數默認實參
---- static成員的繼承:如果基類有static成員,則整個繼承層次中只有一個這樣的成員。每個static成員總是只有一個實例。
#include <iostream> 2
#include <cstdlib>3

4
using namespace std; 5

6
class A7


{8
//重載輸出操作符 9
friend ostream& operator<<(ostream& out, const A&a)10

{11
out << a.m;12
return out;13
}14
15
private:16
int m ;17
18
public:19

A(int i)
{ m = i;}20
21
static int n; 22
23
static A a; //類可以有該類類型的static成員24
//A a1; //error. 類不可以有普通的該類類型的成員 25
26

static void func(A a)
{cout << a << endl;} //類類型可以作為該類static函數的形參 27
28
//static 數據成員可以作為類成員函數的默認實參 29

static void func2(int i = n)
{ cout << i*i <<endl;} 30
};31

32
int A::n = 10;33
A A::a(1);34

35
int main()36


{37
cout << A::n << endl; //1038
cout << A::a <<endl; //139
40
A a2(3); 41
A::func(a2); //342
A::func2(); //10043
44
system("pause");45
return 0;46
} posted on 2010-01-08 12:22 幸運草 閱讀(1584) 評論(6) 編輯 收藏 引用 所屬分類: C++

