青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

asm, c, c++ are my all
-- Core In Computer
posts - 139,  comments - 123,  trackbacks - 0

[轉(zhuǎn)]靜態(tài)成員數(shù)據(jù)和靜態(tài)成員函數(shù)

在沒有講述本章內(nèi)容之前如果我們想要在一個(gè)范圍內(nèi)共享某一個(gè)數(shù)據(jù),那么我們會(huì)設(shè)立全局對(duì)象,但面向?qū)ο蟮某绦蚴怯蓪?duì)象構(gòu)成的,我們?nèi)绾尾拍茉陬惙秶鷥?nèi)共享數(shù)據(jù)呢?

  這個(gè)問題便是本章的重點(diǎn):

  聲明為static的類成員或者成員函數(shù)便能在類的范圍內(nèi)共同享,我們把這樣的成員稱做靜態(tài)成員和靜態(tài)成員函數(shù)。
  下面我們用幾個(gè)實(shí)例來說明這個(gè)問題,類的成員需要保護(hù),通常情況下為了不違背類的封裝特性,我們是把類成員設(shè)置為protected(保護(hù)狀態(tài))的,但是我們?yōu)榱撕?jiǎn)化代碼,使要說明的問題更為直觀,更容易理解,我們?cè)诖颂幎荚O(shè)置為public。

  以下程序我們來做一個(gè)模擬訪問的例子,在程序中,每建立一個(gè)對(duì)象我們?cè)O(shè)置的類靜態(tài)成員變自動(dòng)加一,代碼如下:

#include <iostream>
using namespace std;

class Internet
{
public:
??? Internet(char *name,char *address)
??? {
??????? strcpy(Internet::name,name);
??????? strcpy(Internet::address,address);
??????? count++;
??? }
??? static void Internet::Sc()//靜態(tài)成員函數(shù)
??? {
??????? cout<<count<<endl;
??? }
??? Internet &Rq();
public:
??? char name[20];
??? char address[20];
??? static int count;//這里如果寫成static int count=0;就是錯(cuò)誤的
};

Internet& Internet::Rq()//返回引用的成員函數(shù)
{
??? return *this;
}

int Internet::count = 0;//靜態(tài)成員的初始化
void vist()
{
??? Internet a1("中國(guó)軟件開發(fā)實(shí)驗(yàn)室","
www.cndev-lab.com ");
??? Internet a2("中國(guó)軟件開發(fā)實(shí)驗(yàn)室","
www.cndev-lab.com ");
}
void fn(Internet &s)
{
??? cout<<s.Rq().count;
}
void main()
{
??? cout<<Internet::count<<endl;//靜態(tài)成員值的輸出
??? vist();
??? Internet::Sc();//靜態(tài)成員函數(shù)的調(diào)用
??? Internet b("中國(guó)軟件","
www.cnsoft.com ");
??? Internet::Sc();
??? fn(b);
??? cin.get();
}

  上面代碼我們用了幾種常用的方式建立對(duì)象,當(dāng)建立新對(duì)象并調(diào)用其構(gòu)造函數(shù)的時(shí)候,靜態(tài)成員cout便運(yùn)行加1操作,靜態(tài)成員的初始化應(yīng)該在主函數(shù)調(diào)用之前,并且不能在類的聲明中出現(xiàn),通過運(yùn)行過程的觀察我們發(fā)現(xiàn),靜態(tài)成員count的狀態(tài)并不會(huì)隨著一個(gè)新的對(duì)象的新建而重新定義,盡而我們了解到類的靜態(tài)成員是屬于類的而不是屬于哪一個(gè)對(duì)象的,所以靜態(tài)成員的使用應(yīng)該是類名稱加域區(qū)分符加成員名稱的,在上面的代碼中就是Internet::count,雖然我們?nèi)匀豢梢允褂脤?duì)象名加點(diǎn)操作符號(hào)加成員名稱的方式使用,但是不推薦的,靜態(tài)態(tài)類成員的特性就是屬于類而不專屬于某一個(gè)對(duì)象。

  靜態(tài)成員函數(shù)的特性類似于靜態(tài)成員的使用,同樣與對(duì)象無關(guān),調(diào)用方法為類名稱加域區(qū)分符加成員函數(shù)名稱,在上面的代碼中就是Internet::Sc();,靜態(tài)成員函數(shù)由于與對(duì)象無關(guān)系,所以在其中是不能對(duì)類的普通成員進(jìn)行直接操作的。

  如果上面的 static void Internet::Sc()修改成為:


static void Internet::Sc()//靜態(tài)成員函數(shù)
{
??? cout<<name<<endl;//錯(cuò)誤
??? cout<<count<<endl;
}

  靜態(tài)成員函數(shù)與普通成員函數(shù)的差別就在于缺少this指針,沒有這個(gè)this指針自然也就無從知道name是哪一個(gè)對(duì)象的成員了。

  根據(jù)類靜態(tài)成員的特性我們可以簡(jiǎn)單歸納出幾點(diǎn),靜態(tài)成員的使用范圍:

  1.用來保存對(duì)象的個(gè)數(shù)。

  2.作為一個(gè)標(biāo)記,標(biāo)記一些動(dòng)作是否發(fā)生,比如:文件的打開狀態(tài),打印機(jī)的使用狀態(tài),等等。

  3.存儲(chǔ)鏈表的第一個(gè)或者最后一個(gè)成員的內(nèi)存地址。

  為了做一些必要的練習(xí),深入的掌握靜態(tài)對(duì)象的存在的意義,我們以前面的結(jié)構(gòu)體的教程為基礎(chǔ),用類的方式描述一個(gè)線性鏈表,用于存儲(chǔ)若干學(xué)生的姓名,代碼如下:

#include <iostream>
using namespace std;

class Student
{
public:
??? Student (char *name);
??? ~Student();
public:
??? char name[30];
??? Student *next;
??? static Student *point;
};

Student::Student (char *name)
{
??? strcpy(Student::name,name);
??? this->next=point;
??? point=this;
}

Student::~Student ()//析構(gòu)過程就是節(jié)點(diǎn)的脫離過程
{
??? cout<<"析構(gòu):"<<name<<endl;

??? if(point==this)
??? {
??????? point=this->next;
??????? cin.get();
??????? return;
??? }
??? for(Student *ps=point;ps;ps=ps->next)
??? {
??????? if(ps->next==this)
??????? {
??????? cout<<ps->next<<"|"<<this->next<<endl;
??????? ps->next=next;//=next也可以寫成this->next;
??????? cin.get();
??????? return;
??????? }
??? }
??? cin.get();
}

Student* Student::point=NULL;
void main()
{
??? Student *c = new Student("marry");
??? Student a("colin");
??? Student b("jamesji");
??? delete c;
??? Student *fp=Student::point;
??? while(fp!=NULL)
??? {
??????? cout<<fp->name<<endl;
??????? fp=fp->next;
??? }
??? cin.get();
}

  從上面的代碼來看,原來單純結(jié)構(gòu)化編程需要的一個(gè)鏈表進(jìn)入全局指針在這里被類的靜態(tài)成員指針?biāo)娲?類的靜態(tài)成員完全可以替代全局變量),這個(gè)例子的理解重點(diǎn)主要是要注意觀察類成員的析構(gòu)順序,通過對(duì)析構(gòu)順序的理解,使用析構(gòu)函數(shù)來進(jìn)行節(jié)點(diǎn)的脫鏈操作。

靜態(tài)成員的提出是為了解決數(shù)據(jù)共享的問題。實(shí)現(xiàn)共享有許多方法,如:設(shè)置全局性的變量或?qū)ο笫且环N方法。但是,全局變量或?qū)ο笫怯芯窒扌缘摹_@一章里,我們主要講述類的靜態(tài)成員來實(shí)現(xiàn)數(shù)據(jù)的共享。

  靜態(tài)數(shù)據(jù)成員

  在類中,靜態(tài)成員可以實(shí)現(xiàn)多個(gè)對(duì)象之間的數(shù)據(jù)共享,并且使用靜態(tài)數(shù)據(jù)成員還不會(huì)破壞隱藏的原則,即保證了安全性。因此,靜態(tài)成員是類的所有對(duì)象中共享的成員,而不是某個(gè)對(duì)象的成員。

  使用靜態(tài)數(shù)據(jù)成員可以節(jié)省內(nèi)存,因?yàn)樗撬袑?duì)象所公有的,因此,對(duì)多個(gè)對(duì)象來說,靜態(tài)數(shù)據(jù)成員只存儲(chǔ)一處,供所有對(duì)象共用。靜態(tài)數(shù)據(jù)成員的值對(duì)每個(gè)對(duì)象都是一樣,但它的值是可以更新的。只要對(duì)靜態(tài)數(shù)據(jù)成員的值更新一次,保證所有對(duì)象存取更新后的相同的值,這樣可以提高時(shí)間效率。

  靜態(tài)數(shù)據(jù)成員的使用方法和注意事項(xiàng)如下:

  1、靜態(tài)數(shù)據(jù)成員在定義或說明時(shí)前面加關(guān)鍵字static。

  2、靜態(tài)成員初始化與一般數(shù)據(jù)成員初始化不同。靜態(tài)數(shù)據(jù)成員初始化的格式如下:

    <數(shù)據(jù)類型><類名>::<靜態(tài)數(shù)據(jù)成員名>=<值>

  這表明:

?????   (1) 初始化在類體外進(jìn)行,而前面不加static,以免與一般靜態(tài)變量或?qū)ο笙嗷煜?/font>

  (2) 初始化時(shí)不加該成員的訪問權(quán)限控制符private,public等。

  (3) 初始化時(shí)使用作用域運(yùn)算符來標(biāo)明它所屬類,因此,靜態(tài)數(shù)據(jù)成員是類的成員,而不是對(duì)象的成員。

  3、靜態(tài)數(shù)據(jù)成員是靜態(tài)存儲(chǔ)的,它是靜態(tài)生存期,必須對(duì)它進(jìn)行初始化。

  4、引用靜態(tài)數(shù)據(jù)成員時(shí),采用如下格式:

   <類名>::<靜態(tài)成員名>

  如果靜態(tài)數(shù)據(jù)成員的訪問權(quán)限允許的話(即public的成員),可在程序中,按上述格式來引用靜態(tài)數(shù)據(jù)成員。

  下面舉一例子,說明靜態(tài)數(shù)據(jù)成員的應(yīng)用:

#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(3, 7, 10),N(14, 9, 11);
M.GetNumber();
N.GetNumber();
M.GetSum();
N.GetSum();
}


  從輸出結(jié)果可以看到Sum的值對(duì)M對(duì)象和對(duì)N對(duì)象都是相等的。這是因?yàn)樵诔跏蓟疢對(duì)象時(shí),將M對(duì)象的三個(gè)int型數(shù)據(jù)成員的值求和后賦給了Sum,于是Sum保存了該值。在初始化N對(duì)象時(shí),對(duì)將N對(duì)象的三個(gè)int型數(shù)據(jù)成員的值求和后又加到Sum已有的值上,于是Sum將保存另后的值。所以,不論是通過對(duì)象M還是通過對(duì)象N來引用的值都是一樣的,即為54。
靜態(tài)成員函數(shù)

  靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員一樣,它們都屬于類的靜態(tài)成員,它們都不是對(duì)象成員。因此,對(duì)靜態(tài)成員的引用不需要用對(duì)象名。

  在靜態(tài)成員函數(shù)的實(shí)現(xiàn)中不能直接引用類中說明的非靜態(tài)成員,可以引用類中說明的靜態(tài)成員。如果靜態(tài)成員函數(shù)中要引用非靜態(tài)成員時(shí),可通過對(duì)象來引用。下面通過例子來說明這一點(diǎn)。

#include
class M
{
public:
M(int a) { A=a; B+=a;}
static void f1(M m);
private:
int A;
static int B;
};

void M::f1(M m)
{
cout<<"A="< cout<<"B="< }

int M::B=0;
void main()
{
M P(5),Q(10);
M::f1(P); file://調(diào)用時(shí)不用對(duì)象名
M::f1(Q);
}

  讀者可以自行分析其結(jié)果。從中可看出,調(diào)用靜態(tài)成員函數(shù)使用如下格式:
   <類名>::<靜態(tài)成員函數(shù)名>(<參數(shù)表>);

posted on 2006-07-31 02:54 Jerry Cat 閱讀(301) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用鏈接

留言簿(7)

隨筆檔案

最新隨筆

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              午夜亚洲福利| 伊人成人开心激情综合网| 欧美日本国产一区| 欧美在线free| 性色av一区二区三区| 欧美在线免费| 米奇777在线欧美播放| 免费不卡在线视频| 欧美激情一区二区三区成人| 欧美日韩国产一区二区三区地区| 欧美日韩一区二| 国产精品亚洲综合一区在线观看| 国产伦精品一区二区三| 国产伦精品一区二区三区视频孕妇 | 亚洲视频在线观看一区| 欧美v日韩v国产v| 欧美另类专区| 国产精品久久一卡二卡| 国产午夜精品一区理论片飘花| 国内精品伊人久久久久av一坑| 伊人久久成人| 亚洲欧美日本在线| 嫩模写真一区二区三区三州| 在线亚洲欧美| 老司机凹凸av亚洲导航| 国产精品私人影院| 亚洲精品在线视频观看| 久久精品一区中文字幕| 亚洲国产午夜| 久久国产一区二区| 国产精品久久久久天堂| 最新国产成人在线观看| 久久国产日韩欧美| 一本色道久久综合| 欧美成人一区二区在线| 在线精品国产欧美| 久久久国产精品一区二区三区| 亚洲精品视频在线| 欧美成人中文字幕在线| 亚洲激情视频| 欧美激情欧美狂野欧美精品| 久久精品成人一区二区三区| 国产精品私房写真福利视频| 亚洲男人天堂2024| 一区二区三区视频在线| 国产精品国产a级| 日韩写真在线| 亚洲人成网在线播放| 国产嫩草影院久久久久 | 久久久www成人免费毛片麻豆| 欧美岛国在线观看| 久久久精品一品道一区| 国产精品女人网站| 亚洲最黄网站| 亚洲免费激情| 欧美不卡一区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美一级大片在线免费观看| 亚洲欧美高清| 在线欧美亚洲| 亚洲深夜福利视频| 极品av少妇一区二区| 亚洲精品一区二区三区在线观看| 国产精品久久亚洲7777| 亚洲福利国产| 国产一区深夜福利| 中文一区在线| 日韩亚洲欧美精品| 久久夜色精品| 久久伊人免费视频| 国产精品久久久久久久久婷婷| 美乳少妇欧美精品| 亚洲午夜一区| 老司机凹凸av亚洲导航| 一区二区激情视频| 日韩视频不卡| 国产亚洲在线| 午夜精品理论片| 亚洲日本欧美在线| 国产真实乱子伦精品视频| 午夜宅男久久久| 麻豆精品视频在线| 亚洲综合社区| 麻豆成人在线播放| 午夜精品美女自拍福到在线 | 亚洲一级黄色片| 欧美成人午夜视频| 玖玖在线精品| 国产久一道中文一区| 亚洲主播在线| 欧美亚洲免费在线| 国产精品白丝av嫩草影院| 亚洲另类在线视频| 亚洲欧洲精品一区| 欧美精品三级日韩久久| 欧美国产日韩一区二区在线观看 | 欧美三级网址| 日韩性生活视频| 在线亚洲观看| 国产精品成人国产乱一区| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品国产三级国产专播精品人 | 亚洲精品欧洲| 在线一区免费观看| 国产视频不卡| 老司机午夜免费精品视频| 欧美成人一区二区| 9色精品在线| 国产精品一区一区| 免费成人av在线| 在线综合亚洲| 欧美高清在线| 亚洲宅男天堂在线观看无病毒| 国产精品www网站| 久久国产日韩| 在线一区欧美| 欧美国产三区| 久久精品一区二区| 夜夜狂射影院欧美极品| 国产精品老牛| 欧美黄色成人网| 先锋资源久久| 久久在线91| 欧美一区二区视频免费观看| 亚洲成人中文| 国产偷自视频区视频一区二区| 蜜桃久久精品乱码一区二区| 日韩亚洲欧美中文三级| 久久精品国产一区二区三区| 一区二区免费在线视频| 亚洲国产精品福利| 国产一区在线播放| 久久精品成人一区二区三区蜜臀 | 欧美成人免费小视频| 久久亚洲国产精品一区二区| 亚洲欧美制服另类日韩| 一区二区欧美视频| 亚洲精品三级| 在线一区观看| 亚洲欧美国产日韩中文字幕| 亚洲精品一区二区网址| 亚洲国产精品久久久久婷婷老年| 鲁大师影院一区二区三区| 久久夜色精品国产欧美乱| 久久久久在线观看| 久久久伊人欧美| 你懂的亚洲视频| 亚洲第一免费播放区| 日韩香蕉视频| 亚洲已满18点击进入久久| 先锋影音国产精品| 亚洲影院色无极综合| 欧美在线黄色| 免费视频一区| 欧美午夜一区二区| 国产美女搞久久| 国产一区二区中文| 一区二区高清在线| 久久激情视频久久| 亚洲欧洲综合| 亚洲欧美在线免费| 国产欧美精品日韩| 亚洲在线播放| 国产精品国产三级国产aⅴ浪潮 | 亚洲午夜视频在线| 欧美伦理一区二区| 在线看片日韩| 亚洲国产mv| 欧美日韩国产页| 亚洲免费伊人电影在线观看av| 亚洲精品国产精品国自产观看浪潮| 巨乳诱惑日韩免费av| 亚洲青涩在线| 一区二区三区产品免费精品久久75| 欧美人与性动交cc0o| 亚洲一区亚洲二区| 亚洲午夜激情| 伊人成人在线视频| 亚洲欧洲一区二区三区在线观看| 免费成人在线观看视频| 亚洲先锋成人| 久久精品国产亚洲一区二区| 亚洲国产美女精品久久久久∴| 99精品视频免费观看视频| 国产精品欧美精品| 蜜臀久久久99精品久久久久久| 欧美日韩一区三区四区| 久久国产夜色精品鲁鲁99| 欧美二区乱c少妇| 午夜精品影院在线观看| 欧美精品成人在线| 久久久国产精品一区| 欧美日韩国产a| 亚洲国产天堂久久综合网| 国产精品久久久亚洲一区 | 日韩午夜激情av| 欧美亚洲网站| 欧美综合国产| 国产精品久久久久久久午夜| 欧美激情一区在线观看|