亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2013年09月29日 09:17:43   作者:  
靜態(tài)成員不可在類(lèi)體內(nèi)進(jìn)行賦值,因?yàn)樗潜凰性擃?lèi)的對(duì)象所共享的。你在一個(gè)對(duì)象里給它賦值,其他對(duì)象里的該成員也會(huì)發(fā)生變化。為了避免混亂,所以不可在類(lèi)體內(nèi)進(jìn)行賦值

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

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

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

靜態(tài)成員不可在類(lèi)體內(nèi)進(jìn)行賦值,因?yàn)樗潜凰性擃?lèi)的對(duì)象所共享的。你在一個(gè)對(duì)象里給它賦值,其他對(duì)象里的該成員也會(huì)發(fā)生變化。為了避免混亂,所以不可在類(lèi)體內(nèi)進(jìn)行賦值。

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

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

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

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

#include "iostream"
using namespace std;
class test
{
private:
     int x;
     int y;
public:
     static int num;
     static int Getnum()
     {
          x+=5;   // 這行代碼是錯(cuò)誤的,靜態(tài)成員函數(shù)不能調(diào)用非靜態(tài)數(shù)據(jù)成員,要通過(guò)類(lèi)的對(duì)象來(lái)調(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;
}

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

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

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

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

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

4、靜態(tài)成員函數(shù)沒(méi)有this指針,它不能返回非靜態(tài)成員,因?yàn)槌藢?duì)象會(huì)調(diào)用它外,類(lèi)本身也可以調(diào)用。

靜態(tài)成員函數(shù)可以直接訪(fǎng)問(wèn)該類(lèi)的靜態(tài)數(shù)據(jù)和函數(shù)成員,而訪(fǎng)問(wèn)非靜態(tài)數(shù)據(jù)成員必須通過(guò)參數(shù)傳遞的方式得到一個(gè)對(duì)象名,然后通過(guò)對(duì)象名來(lái)訪(fǎng)問(wèn)。

復(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ù)可以任意地訪(fǎng)問(wèn)靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員。
非靜態(tài)成員函數(shù)Myclass(int a,int b,int c)和GetSum()都訪(fǎng)問(wèn)了靜態(tài)數(shù)據(jù)成員Sum。
靜態(tài)成員函數(shù)不能訪(fǎng)問(wèn)非靜態(tài)成員函數(shù)和非靜態(tài)數(shù)據(jù)成員。

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

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

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

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

靜態(tài)成員函數(shù)不能訪(fǎng)問(wèn)非靜態(tài)成員函數(shù)和非靜態(tài)數(shù)據(jù)成員;

由于沒(méi)有this指針的額外開(kāi)銷(xiāo),因此靜態(tài)成員函數(shù)與類(lèi)的全局函數(shù)相比速度上會(huì)有少許的增長(zhǎng);

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

相關(guān)文章

  • c++模板自定義數(shù)組

    c++模板自定義數(shù)組

    這篇文章主要介紹了c++模板自定義數(shù)組,通過(guò)制造通用模板,創(chuàng)建自定義的數(shù)組展開(kāi)文章相關(guān)內(nèi)容,具有一的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03
  • c++ vector對(duì)象相關(guān)總結(jié)

    c++ vector對(duì)象相關(guān)總結(jié)

    這篇文章主要介紹了c++ vector對(duì)象的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C++獲取GPU顯卡信息的示例代碼

    C++獲取GPU顯卡信息的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用C++獲取GPU顯卡信息,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-02-02
  • C++模板特例化應(yīng)用實(shí)例

    C++模板特例化應(yīng)用實(shí)例

    這篇文章主要介紹了C++模板特例化應(yīng)用實(shí)例,是非常重要的一個(gè)概念,需要的朋友可以參考下
    2014-08-08
  • C/C++中的atan和atan2函數(shù)實(shí)例用法

    C/C++中的atan和atan2函數(shù)實(shí)例用法

    在本篇文章里小編給大家分享的是一篇關(guān)于C/C++中的atan和atan2函數(shù)實(shí)例用法相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • C/C++ Qt ToolBar菜單組件的具體使用

    C/C++ Qt ToolBar菜單組件的具體使用

    ToolBar工具欄在所有窗體應(yīng)用程序中都廣泛被使用,使用ToolBar可以很好的規(guī)范菜單功能分類(lèi),本文就詳細(xì)的介紹一下ToolBar組件的應(yīng)用,感興趣的可以了解一下
    2021-11-11
  • C++實(shí)現(xiàn)二叉樹(shù)基本操作詳解

    C++實(shí)現(xiàn)二叉樹(shù)基本操作詳解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)二叉樹(shù)基本操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • C++核心編程之占位參數(shù)和默認(rèn)參數(shù)

    C++核心編程之占位參數(shù)和默認(rèn)參數(shù)

    這篇文章主要介紹了C++核心編程之占位參數(shù)和默認(rèn)參數(shù),c++中函數(shù)的形參列表中的形參是可以有默認(rèn)值的,函數(shù)的形參列表里可以有占位參數(shù),用來(lái)占位,調(diào)用函數(shù)時(shí)必須填補(bǔ)位置。下面更多相關(guān)內(nèi)容的詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-03-03
  • c++中臨時(shí)變量不能作為非const的引用參數(shù)的方法

    c++中臨時(shí)變量不能作為非const的引用參數(shù)的方法

    下面小編就為大家?guī)?lái)一篇c++中臨時(shí)變量不能作為非const的引用參數(shù)的方法。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C++運(yùn)算符重載與多繼承及二義性詳解

    C++運(yùn)算符重載與多繼承及二義性詳解

    繼友元知識(shí)過(guò)后,就到了今天的C++運(yùn)算符重載的內(nèi)容了,運(yùn)算符重載是C++里比較重要的內(nèi)容。這篇博文不會(huì)一下子講完各種運(yùn)算符重載,因?yàn)樘嗔肆艘膊缓梦照莆眨赃\(yùn)算符重載我準(zhǔn)備分多次記錄和分享,那么接下來(lái)進(jìn)入正文
    2022-11-11

最新評(píng)論