靜態(tài)數(shù)據(jù)成員
靜態(tài)成員可實現(xiàn)多個對象間的數(shù)據(jù)共享叶堆,不會破壞隱藏的原則
靜態(tài)成員是類的所有對象共享的成員抠璃,而不是某個對象的成員
靜態(tài)數(shù)據(jù)成員可以節(jié)省內(nèi)存
靜態(tài)數(shù)據(jù)成員在定義或說明時前面加關鍵字static
初始化的格式
<數(shù)據(jù)類型><類名>::<靜態(tài)數(shù)據(jù)成員名>=<值>
注意事項
1.初始化在類體外進行勇劣,而前面不加static
2.初始化時不加該成員的訪問權(quán)限控制符private广匙,public等
3.初始化時使用作用域運算符來標明它所屬類
4.靜態(tài)數(shù)據(jù)成員是類的成員弧可,而不是對象的成員
5.靜態(tài)數(shù)據(jù)成員是靜態(tài)存儲嘁字,靜態(tài)生存期,必須初始化
引用靜態(tài)數(shù)據(jù)成員時掸掸,采用如下格式
<類名>::<靜態(tài)成員名>
示例:
#include <iostream>
using namespace std;
class CStatic
{
public:
CStatic(int a, int b, int c);
void GetNumber();
void GetSum();
private:
int A, B, C;
static int Sum;
};
int CStatic::Sum = 0; //靜態(tài)數(shù)據(jù)成員類外且必須初始化
CStatic::CStatic(int a, int b, int c)
{
A = a;
B = b;
C = c;
Sum += A + B + C;
}
void CStatic::GetNumber()
{
cout << "Number=" << A << "," << B << "," << C << endl;
}
void CStatic::GetSum()
{
cout << "Sum=" << Sum << endl;
}
void main()
{
CStatic M(3, 7, 10), N(14, 9, 11);
M.GetNumber();
N.GetNumber();
/*M和N的GetSum()成員函數(shù)都會打印54
說明靜態(tài)成員變量對2個對象都有效
也說明靜態(tài)成員屬于類论皆,而不是某個特定的對象*/
M.GetSum(); //54
N.GetSum(); //54
system("pause");
}
靜態(tài)成員函數(shù)
和靜態(tài)數(shù)據(jù)成員一樣都屬于類的靜態(tài)成員,都不是對象成員
引用不需要用對象名
函數(shù)的實現(xiàn)中不能直接引用類中說明的非靜態(tài)成員
可以引用類中說明的靜態(tài)成員
若靜態(tài)成員函數(shù)中要引用非靜態(tài)成員時猾漫,可通過對象來引用
靜態(tài)成員函數(shù)使用如下格式
<類名>::<靜態(tài)成員函數(shù)名>(<參數(shù)表>);
示例
#include <iostream>
using namespace std;
class M
{
public:
M(int a)
{
A = a;
B += a;
}
static void f1(M m);
private:
int A;
static int B;
};
void M::f1(M m)
{
cout << "A=" << m.A << endl;
cout << "B=" << B << endl;
}
int M::B = 0;
void main()
{
M P(5), Q(10);
M::f1(P); //調(diào)用時不用對象名
M::f1(Q);
system("pause");
}