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

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

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

2020-02-24 14:24:48
字體:
來源:轉載
供稿:網友

在C語言中,大家都很熟悉靜態成員與類靜態成員,其實生命周期和范圍不同于一般變量,那么詳解C++類靜態成員與類靜態成員函數,大家都知道嗎?下面由武林技術頻道小編來告訴大家。

當將類的某個數據成員聲明為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指針的額外開銷,因此靜態成員函數與類的全局函數相比速度上會有少許的增長;

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

上面就是武林技術頻道小編給大家介紹的詳解C++類靜態成員與類靜態成員函數,相信大家看完小編寫的這篇文章后,對于這方面的知識也有了一定的認識,希望這篇文章能夠幫助到你。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区精品久久久| 一区二区在线视频播放| 一区二区三区高清国产| 亚洲专区国产精品| 欧美电影在线观看高清| 亚洲精品综合久久中文字幕| 亚洲精品videossex少妇| 欧美日韩亚洲国产一区| 亚洲视频欧美视频| 亚洲人成在线观看网站高清| 久久久国产一区| 97香蕉久久超级碰碰高清版| 久久久精品亚洲| 欧美疯狂做受xxxx高潮| 国产精品青草久久久久福利99| 国产精品久久久999| 91免费精品视频| 日韩中文第一页| 91在线国产电影| www日韩欧美| 欧美激情在线观看视频| 一区二区欧美激情| 亚洲一区久久久| 精品国产一区二区三区久久狼黑人| 57pao成人国产永久免费| 亚洲欧美国产精品va在线观看| 精品成人69xx.xyz| 日韩欧美国产高清91| 欧美高清在线播放| 欧美亚洲另类制服自拍| 日韩有码在线观看| 国产偷国产偷亚洲清高网站| 亚洲免费视频在线观看| 深夜福利国产精品| 日韩精品有码在线观看| 亚洲最新在线视频| 国产精品久久久久久久美男| 亚洲第一区在线| 日韩国产欧美精品在线| 久久久在线免费观看| 亚洲激情视频网| 操日韩av在线电影| 中文字幕一区二区三区电影| 久久中文久久字幕| 欧美另类极品videosbestfree| 日韩最新在线视频| 欧美激情乱人伦| 国产成人一区二区在线| 国产色婷婷国产综合在线理论片a| 成人欧美一区二区三区在线湿哒哒| 69av在线视频| 亚洲国产精品999| 亚洲一区二区国产| 日韩在线一区二区三区免费视频| 久久久久久久国产| 国产免费一区二区三区在线能观看| 不卡伊人av在线播放| 亚洲精品乱码久久久久久金桔影视| 亚洲精品国产品国语在线| 精品动漫一区二区| 在线视频日韩精品| 精品亚洲一区二区三区在线观看| 国产精品久久久久久久久免费看| 国产欧美日韩精品丝袜高跟鞋| 久久免费视频在线| 日韩电影中文字幕在线| www.亚洲男人天堂| 亚洲专区中文字幕| 理论片在线不卡免费观看| 日韩最新在线视频| 欧美成人sm免费视频| 热久久这里只有| 国产欧美日韩最新| www.久久草.com| 欧美久久精品一级黑人c片| 91在线视频九色| 在线观看日韩www视频免费| 欧美色另类天堂2015| 草民午夜欧美限制a级福利片| 亚洲精品在线91| 美日韩丰满少妇在线观看| www.99久久热国产日韩欧美.com| 久久99亚洲热视| 日韩中文字幕久久| 日韩中文理论片| 久久精品视频在线| 欧美一级片久久久久久久| 成人午夜在线观看| 国产欧美日韩亚洲精品| 人人澡人人澡人人看欧美| 亚洲综合中文字幕在线| 亚洲综合中文字幕在线| 91免费国产网站| 国产精品网红直播| 久久久久久久电影一区| 国产精品99久久久久久久久久久久| 国产精品偷伦免费视频观看的| 欧美激情精品久久久久久免费印度| 在线视频欧美日韩| 欧美成人精品xxx| 国产噜噜噜噜久久久久久久久| 国产经典一区二区| 日韩h在线观看| 97国产精品视频| 国产深夜精品福利| 国产精品av免费在线观看| 亚洲在线第一页| 奇米一区二区三区四区久久| 日韩激情视频在线| 国产一区二区三区高清在线观看| 在线观看国产欧美| 欧美美最猛性xxxxxx| 国产丝袜视频一区| 97精品国产97久久久久久| 26uuu另类亚洲欧美日本老年| 色无极亚洲影院| 亚洲女人初尝黑人巨大| 亚洲无av在线中文字幕| 91在线免费网站| 国产一区二区视频在线观看| 国产精品久久久久久久久借妻| 久久精品国产综合| 91伊人影院在线播放| 欧美极品美女电影一区| 91亚洲国产成人精品性色| 欧美视频免费在线观看| 欧美情侣性视频| 国产a∨精品一区二区三区不卡| 97在线观看视频| 亚洲国产小视频| 成人免费网站在线观看| 日本精品一区二区三区在线| 亚洲欧美www| 国内精品久久久久伊人av| 在线播放精品一区二区三区| 欧美激情视频网址| 国产97在线观看| 中文字幕欧美亚洲| 国产日韩视频在线观看| 久久久成人精品视频| 福利视频第一区| 日韩成人中文电影| 91精品在线一区| 色偷偷综合社区| 国产日韩在线精品av| 久久精品久久久久电影| 中文字幕在线观看日韩| 欧美日韩激情视频| 久久久999国产精品| 中文字幕久久久av一区| 精品亚洲一区二区三区四区五区| 国产精品久久久久久影视| 欧美高清第一页| 少妇高潮久久久久久潘金莲| 国产成人精品国内自产拍免费看| 欧美尤物巨大精品爽| 久久成人18免费网站| 亚洲一区二区三区乱码aⅴ| 亚洲精品一区在线观看香蕉| 26uuu久久噜噜噜噜| 欧美日韩免费看| 国产成人鲁鲁免费视频a| 亚洲精品视频免费在线观看| 亚洲国产精品热久久|