亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++類靜態成員與類靜態成員函數詳解

2020-01-26 15:48:17
字體:
來源:轉載
供稿:網友

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

靜態數據成員的用途之一是統計有多少個對象實際存在。

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

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

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

一般形式:
數據類型類名::靜態數據成員名=初值
注意:不能用參數初始化表對靜態成員初始化。一般系統缺省初始為0。

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

復制代碼 代碼如下:

#include "iostream"
using namespace std;
class test
{
private:
     int x;
     int y;
public:
     static int num;
     static int Getnum()
     {
          x+=5;   // 這行代碼是錯誤的,靜態成員函數不能調用非靜態數據成員,要通過類的對象來調用。
          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;   // 這行代碼是錯誤的
靜態函數成員必須通過對象名來訪問非靜態數據成員。
另外,靜態成員函數在類外實現時候無須加static關鍵字,否則是錯誤的。
若在類的體外來實現上述的那個靜態成員函數,不能加static關鍵字,這樣寫就可以了:
復制代碼 代碼如下:

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

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

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

3、靜態成員仍然遵循public,private,protected訪問準則。

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

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

復制代碼 代碼如下:

class Myclass
{
private:
        int a,b,c;
        static int Sum;    //聲明靜態數據成員
public:
        Myclass(int a,int b,int c);
        void GetSum();
};
int Myclass::Sum=0;       //定義并初始化靜態數據成員
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;
}

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

關于靜態成員函數,可以總結為以下幾點:

出現在類體外的函數定義不能指定關鍵字static;

靜態成員之間可以相互訪問,包括靜態成員函數訪問靜態數據成員和訪問靜態成員函數;

非靜態成員函數可以任意地訪問靜態成員函數和靜態數據成員;

靜態成員函數不能訪問非靜態成員函數和非靜態數據成員;

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一品av免费观看| 中文字幕精品一区久久久久| 色爱精品视频一区| 欧美性69xxxx肥| 亚洲国产高潮在线观看| 日韩精品极品毛片系列视频| 欧美午夜影院在线视频| 亚洲女人天堂网| 日韩精品中文字幕有码专区| 精品国产老师黑色丝袜高跟鞋| 国产成人短视频| 1769国产精品| 国产成人精品一区二区三区| 欧美成人免费播放| 日韩成人性视频| 狠狠躁夜夜躁人人躁婷婷91| 91a在线视频| 一区二区三区 在线观看视| 欧美老肥婆性猛交视频| 午夜精品在线视频| 欧美丰满老妇厨房牲生活| 国产精品嫩草影院一区二区| 国产国产精品人在线视| 日韩精品福利在线| 国产精品久久77777| 久久中文字幕国产| 国产日韩在线看片| 91久久精品一区| 亚洲免费av网址| 欧美日韩一二三四五区| 欧美在线观看网站| 国产精品日日摸夜夜添夜夜av| 日韩影视在线观看| 亚洲一区二区三区xxx视频| 69av在线视频| 91精品国产高清久久久久久| 中文日韩在线观看| 久久在线免费视频| 97激碰免费视频| 最近中文字幕mv在线一区二区三区四区| 久久手机精品视频| 亚洲免费福利视频| 亚洲免费视频观看| 日韩中文字幕国产精品| 久久久久日韩精品久久久男男| 美女国内精品自产拍在线播放| 青青青国产精品一区二区| 国产精品久久久久久久久久尿| 亚洲欧美在线第一页| 欧美激情免费观看| 性欧美xxxx视频在线观看| 亚洲国产精品久久久久| 国产91在线高潮白浆在线观看| 亚洲人成在线播放| 欧美乱妇40p| 欧美视频不卡中文| 最近中文字幕mv在线一区二区三区四区| wwwwwwww亚洲| 久久福利视频网| 午夜欧美大片免费观看| 日韩av在线网站| 一区二区三区美女xx视频| 日韩av在线电影网| 青青草原一区二区| 欧洲亚洲免费在线| 亚洲男人第一网站| 久久久久久久影视| 日本一区二三区好的精华液| 久久久亚洲影院你懂的| 成人黄色在线观看| 国产精品第三页| 5566日本婷婷色中文字幕97| 国产一区二区三区视频免费| 亚洲国产日韩一区| 欧美另类xxx| 欧美老女人性生活| 97国产精品免费视频| 成人激情视频在线观看| 亚洲精品一区二三区不卡| 国产精品国产亚洲伊人久久| 欧美巨乳美女视频| 欧美国产第一页| 精品一区二区亚洲| 国产日韩在线观看av| 国产精品高潮呻吟久久av黑人| 青青草原一区二区| 尤物九九久久国产精品的分类| 亚洲欧美成人在线| 欧美一级淫片播放口| 亚洲wwwav| 午夜精品在线视频| 欧美视频在线观看免费网址| 日韩在线中文视频| 亚洲第一视频网| 国产亚洲精品一区二555| 91啪国产在线| 久久精品成人欧美大片| 欧美日韩在线视频观看| 欧美色欧美亚洲高清在线视频| 国产精品高潮粉嫩av| 久久中文久久字幕| 久久久精品久久| 欧美一区深夜视频| 98精品国产高清在线xxxx天堂| 情事1991在线| 91精品国产九九九久久久亚洲| 亚洲第一综合天堂另类专| 亚洲a级在线播放观看| 日本成人在线视频网址| 91精品国产色综合久久不卡98口| 欧美在线观看www| 欧美日韩一区免费| 成人av色在线观看| 久久国产精品偷| 国产精品a久久久久久| 色先锋资源久久综合5566| 国产欧美久久一区二区| 国产在线视频91| 国产精品黄色av| 欧美激情在线狂野欧美精品| 91av视频在线免费观看| 日本精品一区二区三区在线播放视频| 亚洲老板91色精品久久| 欧美亚洲视频在线观看| 久久天天躁狠狠躁夜夜av| 97视频在线观看免费| 91九色单男在线观看| 欧美性极品少妇精品网站| 国产又爽又黄的激情精品视频| 中文字幕欧美日韩va免费视频| 奇门遁甲1982国语版免费观看高清| 欧美电影免费观看电视剧大全| 久久久人成影片一区二区三区观看| 欧美成人精品h版在线观看| 午夜剧场成人观在线视频免费观看| 午夜精品理论片| 欧美性猛交99久久久久99按摩| 色多多国产成人永久免费网站| 欧美精品久久久久久久久久| 国产亚洲精品91在线| 亚洲精品之草原avav久久| 国产精品国产福利国产秒拍| 欧美激情第6页| 久久综合五月天| 色婷婷综合成人av| 亚洲成人av在线播放| 欧美日韩在线视频一区| 亚洲日韩欧美视频| 久久综合九色九九| 亚洲精品久久久久久久久久久| 欧美极度另类性三渗透| www.日韩视频| 欧美乱人伦中文字幕在线| 国产精品久久久久久久av大片| 欧美日韩成人网| 国产精品777| 亚洲精品美女久久久| 欧美精品日韩www.p站| 欧美极品少妇全裸体| 亚洲电影免费观看高清| 久久久人成影片一区二区三区观看| 亚洲二区在线播放视频| 国产精品久久久av久久久| 欧美—级a级欧美特级ar全黄|