最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++類靜態(tài)成員與類靜態(tài)成員函數(shù)詳解

 更新時間:2013年09月29日 09:17:43   作者:  
靜態(tài)成員不可在類體內(nèi)進行賦值,因為它是被所有該類的對象所共享的。你在一個對象里給它賦值,其他對象里的該成員也會發(fā)生變化。為了避免混亂,所以不可在類體內(nèi)進行賦值

當(dāng)將類的某個數(shù)據(jù)成員聲明為static時,該靜態(tài)數(shù)據(jù)成員只能被定義一次,而且要被同類的所有對象共享。各個對象都擁有類中每一個普通數(shù)據(jù)成員的副本,但靜態(tài)數(shù)據(jù)成員只有一個實例存在,與定義了多少類對象無關(guān)。靜態(tài)方法就是與該類相關(guān)的,是類的一種行為,而不是與該類的實例對象相關(guān)。

靜態(tài)數(shù)據(jù)成員的用途之一是統(tǒng)計有多少個對象實際存在。

靜態(tài)數(shù)據(jù)成員不能在類中初始化,實際上類定義只是在描述對象的藍圖,在其中指定初值是不允許的。也不能在類的構(gòu)造函數(shù)中初始化該成員,因為靜態(tài)數(shù)據(jù)成員為類的各個對象共享,否則每次創(chuàng)建一個類的對象則靜態(tài)數(shù)據(jù)成員都要被重新初始化。

靜態(tài)成員不可在類體內(nèi)進行賦值,因為它是被所有該類的對象所共享的。你在一個對象里給它賦值,其他對象里的該成員也會發(fā)生變化。為了避免混亂,所以不可在類體內(nèi)進行賦值。

靜態(tài)成員的值對所有的對象是一樣的。靜態(tài)成員可以被初始化,但只能在類體外進行初始化。

一般形式:
數(shù)據(jù)類型類名::靜態(tài)數(shù)據(jù)成員名=初值
注意:不能用參數(shù)初始化表對靜態(tài)成員初始化。一般系統(tǒng)缺省初始為0。

靜態(tài)成員是類所有的對象的共享的成員,而不是某個對象的成員。它在對象中不占用存儲空間,這個屬性為整個類所共有,不屬于任何一個具體對象。所以靜態(tài)成員不能在類的內(nèi)部初始化,比如聲明一個學(xué)生類,其中一個成員為學(xué)生總數(shù),則這個變量就應(yīng)當(dāng)聲明為靜態(tài)變量,應(yīng)該根據(jù)實際需求來設(shè)置成員變量。

復(fù)制代碼 代碼如下:

#include "iostream"
using namespace std;
class test
{
private:
     int x;
     int y;
public:
     static int num;
     static int Getnum()
     {
          x+=5;   // 這行代碼是錯誤的,靜態(tài)成員函數(shù)不能調(diào)用非靜態(tài)數(shù)據(jù)成員,要通過類的對象來調(diào)用。
          num+=15;
          return num;
     }
};
int test::num = 10;
int main(void)
{
     test a;
     cout<<test::num<<endl;        //10
     test::num = 20;
     cout<<test::num<<endl;        //20
     cout<<test::Getnum()<<endl;   //35
     cout<<a.Getnum()<<endl;       //50
     system("pause");
     return 0;
}

通過上例可知:  x+=5;   // 這行代碼是錯誤的
靜態(tài)函數(shù)成員必須通過對象名來訪問非靜態(tài)數(shù)據(jù)成員。
另外,靜態(tài)成員函數(shù)在類外實現(xiàn)時候無須加static關(guān)鍵字,否則是錯誤的。
若在類的體外來實現(xiàn)上述的那個靜態(tài)成員函數(shù),不能加static關(guān)鍵字,這樣寫就可以了:
復(fù)制代碼 代碼如下:

     int test::Getnum()
     {
       .........
     }

1、static成員的所有者是類本身和對象,但是多有對象擁有一樣的靜態(tài)成員。從而在定義對象是不能通過構(gòu)造函數(shù)對其進行初始化。

2、靜態(tài)成員不能在類定義里邊初始化,只能在class body外初始化。

3、靜態(tài)成員仍然遵循public,private,protected訪問準(zhǔn)則。

4、靜態(tài)成員函數(shù)沒有this指針,它不能返回非靜態(tài)成員,因為除了對象會調(diào)用它外,類本身也可以調(diào)用。

靜態(tài)成員函數(shù)可以直接訪問該類的靜態(tài)數(shù)據(jù)和函數(shù)成員,而訪問非靜態(tài)數(shù)據(jù)成員必須通過參數(shù)傳遞的方式得到一個對象名,然后通過對象名來訪問。

復(fù)制代碼 代碼如下:

class Myclass
{
private:
        int a,b,c;
        static int Sum;    //聲明靜態(tài)數(shù)據(jù)成員
public:
        Myclass(int a,int b,int c);
        void GetSum();
};
int Myclass::Sum=0;       //定義并初始化靜態(tài)數(shù)據(jù)成員
Myclass::Myclass(int a,int b,int c)
{
        this->a=a;
        this->b=b;
        this->c=c;
        Sum+=a+b+c;
}
void Myclass::GetSum()
{
        cout <<"Sum=" <<Sum <<endl;
}
int main(void)
{
        Myclass me(10,20,30);
        me.GetSum();
        system("pause");
        return 0;
}

由上例可知,非靜態(tài)成員函數(shù)可以任意地訪問靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員。
非靜態(tài)成員函數(shù)Myclass(int a,int b,int c)和GetSum()都訪問了靜態(tài)數(shù)據(jù)成員Sum。
靜態(tài)成員函數(shù)不能訪問非靜態(tài)成員函數(shù)和非靜態(tài)數(shù)據(jù)成員。

關(guān)于靜態(tài)成員函數(shù),可以總結(jié)為以下幾點:

出現(xiàn)在類體外的函數(shù)定義不能指定關(guān)鍵字static;

靜態(tài)成員之間可以相互訪問,包括靜態(tài)成員函數(shù)訪問靜態(tài)數(shù)據(jù)成員和訪問靜態(tài)成員函數(shù);

非靜態(tài)成員函數(shù)可以任意地訪問靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員;

靜態(tài)成員函數(shù)不能訪問非靜態(tài)成員函數(shù)和非靜態(tài)數(shù)據(jù)成員;

由于沒有this指針的額外開銷,因此靜態(tài)成員函數(shù)與類的全局函數(shù)相比速度上會有少許的增長;

調(diào)用靜態(tài)成員函數(shù),可以用成員訪問操作符(.)和(->)為一個類的對象或指向類對象的指針調(diào)用靜態(tài)成員函數(shù),當(dāng)同一類的所有對象使用一個量時,對于這個共用的量,可以用靜態(tài)數(shù)據(jù)成員變量,這個變量對于同一類的所有的對象都取相同的值。靜態(tài)成員變量只能被靜態(tài)成員函數(shù)調(diào)用。靜態(tài)成員函數(shù)也是由同一類中的所有對象共用。只能調(diào)用靜態(tài)成員變量和靜態(tài)成員函數(shù)。

相關(guān)文章

  • C語言基于單鏈表實現(xiàn)通訊錄功能

    C語言基于單鏈表實現(xiàn)通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了C語言基于單鏈表實現(xiàn)通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • QT5多窗口跳轉(zhuǎn)實現(xiàn)步驟詳解

    QT5多窗口跳轉(zhuǎn)實現(xiàn)步驟詳解

    這篇文章主要介紹了使用Qt5實現(xiàn)多窗口界面跳轉(zhuǎn)的過程,包括創(chuàng)建多個UI界面、設(shè)計按鈕連接槽函數(shù)以及實現(xiàn)界面之間的導(dǎo)航,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • 淺析C和C++函數(shù)的相互引用

    淺析C和C++函數(shù)的相互引用

    C++是一種面向?qū)ο蟮某绦蛟O(shè)計語言,為了支持函數(shù)的重載,C++對全局函數(shù)的處理方式與C有明顯的不同
    2013-10-10
  • C++使用easyx實現(xiàn)打磚塊游戲

    C++使用easyx實現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細(xì)介紹了C++使用easyx實現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++基礎(chǔ)學(xué)習(xí)之函數(shù)重載的簡單介紹

    C++基礎(chǔ)學(xué)習(xí)之函數(shù)重載的簡單介紹

    函數(shù)重載是一種特殊情況,C++允許在同一作用域中聲明幾個類似的同名函數(shù),這些同名函數(shù)的形參列表(參數(shù)個數(shù),類型,順序)必須不同,常用來處理實現(xiàn)功能類似數(shù)據(jù)類型不同的問題。這篇文章主要給大家介紹了關(guān)于C++基礎(chǔ)學(xué)習(xí)之函數(shù)重載的相關(guān)資料,需要的朋友可以參考下
    2019-01-01
  • C++實現(xiàn)LeetCode(79.詞語搜索)

    C++實現(xiàn)LeetCode(79.詞語搜索)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(79.詞語搜索),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Qt中QPixmap、QImage、QPicture、QBitmap四者區(qū)別詳解

    Qt中QPixmap、QImage、QPicture、QBitmap四者區(qū)別詳解

    Qt 提供了四個類來處理圖像數(shù)據(jù):QImage、QPixmap、QBitmap 和 QPicture,本文就詳細(xì)的介紹一下四者區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言計算Robots機器人行走路線

    C語言計算Robots機器人行走路線

    這篇文章介紹了C語言計算Robots機器人行走路線,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C++中memcpy函數(shù)的使用以及模擬實現(xiàn)

    C++中memcpy函數(shù)的使用以及模擬實現(xiàn)

    memcpy是c和c++使用的內(nèi)存拷貝函數(shù),本文主要介紹了C++中memcpy函數(shù)的使用以及模擬實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項

    C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項

    C語言庫函數(shù)char *strcpy(char *dest, const char *src)把src所指向的字符串復(fù)制到dest,下面這篇文章主要給大家介紹了關(guān)于C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項的相關(guān)資料,需要的朋友可以參考下
    2022-11-11

最新評論

裕民县| 含山县| 广汉市| 吴忠市| 武强县| 巴东县| 云南省| 科技| 肇庆市| 多伦县| 增城市| 怀宁县| 三明市| 阿坝县| 寻乌县| 孟州市| 介休市| 肇庆市| 会宁县| 阿图什市| 云南省| 昭觉县| 大城县| 宁武县| 巩留县| 阳曲县| 延川县| 通渭县| 丹寨县| 江孜县| 吉木萨尔县| 江油市| 谷城县| 米脂县| 卓资县| 苗栗市| 阳城县| 招远市| 冕宁县| 云南省| 栾城县|