二級(jí)C++類的繼承與派生:繼承的工作方式

字號(hào):

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