創(chuàng)建靜態(tài)成員主要是解決數(shù)據(jù)共享問題,而創(chuàng)建友員的目的是為了讓某些函數(shù)訪問類中的私有成員。
靜態(tài)對象獨立于具體的類對象而存在,是從屬于類的屬性,不是屬于某個對象的。靜態(tài)成員變量一般用于:
⒈用來保存該類對象的個數(shù)。
⒉作為一個標志,指示一個特定的動作是否發(fā)生,如:可能創(chuàng)建幾個對象,每個對象要對某個磁盤文件進行寫操作,但顯然在同一時間里只允許一個對象寫文件,在這種情況下,用戶希望說明一個靜態(tài)數(shù)據(jù)成員指出文件何時正在使用,何時處于空閑狀態(tài)。
⒊用來保存指向鏈表第一成員或最后一個成員的指針。
⒋用來管理該類的各個對象共享的一些資源,如各個對象都從同一空間分配,或者各個對象使用同一文件資源等。
⒌靜態(tài)成員函數(shù)則用來對這些靜態(tài)成員數(shù)據(jù)操作。如返回對象個數(shù),查找鏈表中的某個節(jié)點,或者判斷某個共享文件是否被某個對象使用等。
靜態(tài)成員函數(shù)與一般成員函數(shù)的區(qū)別:
(1)定義方式不同:靜態(tài)成員定義時前面加修飾符 static. 而非靜態(tài)成員不用。
(2)使用限制不同:靜態(tài)成員函數(shù)只能訪問靜態(tài)成員變量。而非靜態(tài)成員函數(shù)既可以訪問靜態(tài)數(shù)據(jù)成員也可以訪問非靜態(tài)數(shù)據(jù)成員。
(3)調(diào)用方式不同:靜態(tài)成員函數(shù)的調(diào)用格式為: classname::static Func(), 而非靜態(tài)成員函數(shù)的調(diào)用須通過具體的對象調(diào)用,格式為: Object.func() 。
(4)靜態(tài)成員函數(shù)沒有 this 指針,所以它不能訪問訪問某個具體對象的數(shù)據(jù)成員,即靜態(tài)成員函數(shù)不能訪問非靜態(tài)數(shù)據(jù)成員。
1、靜態(tài)數(shù)據(jù)成員:
(1)靜態(tài)數(shù)據(jù)成員在定義或說明時前面加關鍵字 static 。
例: …….
Private:
Int a,b,c;
Static int s;
(2)靜態(tài)成員的初始化與以便數(shù)據(jù)成員的初始化不同。 靜態(tài)數(shù)據(jù)成員一般在類定義外部按特定的格式進行初始化。其格式為:
< 數(shù)據(jù)類型 >< 類名 >::< 靜態(tài)數(shù)據(jù)成員名 >=< 值 >;
例: class Nclass
{
……..
private:
static int a;
…….
};
int Nclass::a=5;
(3)引用靜態(tài)數(shù)據(jù)成員時,采用如下格式:
< 類名 >::< 靜態(tài)成員名 >
如果靜態(tài)數(shù)據(jù)成員的訪問權限允許的話(即 public 成員),可在程序中,按上述格式來引用靜態(tài)數(shù)據(jù)成員。
例 1 :
#include
class Myclass
{
public:
Myclass(int a,int b,int c);
Void GetNumber();
Void GetSum();
Private:
Int A,B,C;
Static int Sum;
};
int Myclass::Sum=0;
Myclass::Myclass(int a,int b,int c)
{
A=a;
B=b;
C=c;
Sum+=A+B+C;
}
void Myclass::GetNumber()
{
cout<<”Number=”<
}
void Myclass::GetSum()
{
cout<<”Sum=”< }
void main()
{
Myclass M(1,2,3),N(4,5,6);
M.GetNumber();
N.GetNumber();
M.GetSum();
N.GetSum();
}
運行結果:
Number=1,2,3
Number=4,5,6
Sum=21
Sum=21
這里, M 和 N 兩個對象的 Sum 值相等。
靜態(tài)對象獨立于具體的類對象而存在,是從屬于類的屬性,不是屬于某個對象的。靜態(tài)成員變量一般用于:
⒈用來保存該類對象的個數(shù)。
⒉作為一個標志,指示一個特定的動作是否發(fā)生,如:可能創(chuàng)建幾個對象,每個對象要對某個磁盤文件進行寫操作,但顯然在同一時間里只允許一個對象寫文件,在這種情況下,用戶希望說明一個靜態(tài)數(shù)據(jù)成員指出文件何時正在使用,何時處于空閑狀態(tài)。
⒊用來保存指向鏈表第一成員或最后一個成員的指針。
⒋用來管理該類的各個對象共享的一些資源,如各個對象都從同一空間分配,或者各個對象使用同一文件資源等。
⒌靜態(tài)成員函數(shù)則用來對這些靜態(tài)成員數(shù)據(jù)操作。如返回對象個數(shù),查找鏈表中的某個節(jié)點,或者判斷某個共享文件是否被某個對象使用等。
靜態(tài)成員函數(shù)與一般成員函數(shù)的區(qū)別:
(1)定義方式不同:靜態(tài)成員定義時前面加修飾符 static. 而非靜態(tài)成員不用。
(2)使用限制不同:靜態(tài)成員函數(shù)只能訪問靜態(tài)成員變量。而非靜態(tài)成員函數(shù)既可以訪問靜態(tài)數(shù)據(jù)成員也可以訪問非靜態(tài)數(shù)據(jù)成員。
(3)調(diào)用方式不同:靜態(tài)成員函數(shù)的調(diào)用格式為: classname::static Func(), 而非靜態(tài)成員函數(shù)的調(diào)用須通過具體的對象調(diào)用,格式為: Object.func() 。
(4)靜態(tài)成員函數(shù)沒有 this 指針,所以它不能訪問訪問某個具體對象的數(shù)據(jù)成員,即靜態(tài)成員函數(shù)不能訪問非靜態(tài)數(shù)據(jù)成員。
1、靜態(tài)數(shù)據(jù)成員:
(1)靜態(tài)數(shù)據(jù)成員在定義或說明時前面加關鍵字 static 。
例: …….
Private:
Int a,b,c;
Static int s;
(2)靜態(tài)成員的初始化與以便數(shù)據(jù)成員的初始化不同。 靜態(tài)數(shù)據(jù)成員一般在類定義外部按特定的格式進行初始化。其格式為:
< 數(shù)據(jù)類型 >< 類名 >::< 靜態(tài)數(shù)據(jù)成員名 >=< 值 >;
例: class Nclass
{
……..
private:
static int a;
…….
};
int Nclass::a=5;
(3)引用靜態(tài)數(shù)據(jù)成員時,采用如下格式:
< 類名 >::< 靜態(tài)成員名 >
如果靜態(tài)數(shù)據(jù)成員的訪問權限允許的話(即 public 成員),可在程序中,按上述格式來引用靜態(tài)數(shù)據(jù)成員。
例 1 :
#include
class Myclass
{
public:
Myclass(int a,int b,int c);
Void GetNumber();
Void GetSum();
Private:
Int A,B,C;
Static int Sum;
};
int Myclass::Sum=0;
Myclass::Myclass(int a,int b,int c)
{
A=a;
B=b;
C=c;
Sum+=A+B+C;
}
void Myclass::GetNumber()
{
cout<<”Number=”<
}
void Myclass::GetSum()
{
cout<<”Sum=”<
void main()
{
Myclass M(1,2,3),N(4,5,6);
M.GetNumber();
N.GetNumber();
M.GetSum();
N.GetSum();
}
運行結果:
Number=1,2,3
Number=4,5,6
Sum=21
Sum=21
這里, M 和 N 兩個對象的 Sum 值相等。