精品理论电影在线_日韩视频一区二区_一本色道精品久久一区二区三区_香蕉综合视频

計(jì)算機(jī)二級(jí)C++函數(shù):類成員的初始化

發(fā)布時(shí)間:2011-08-29 共1頁(yè)

  學(xué)習(xí)過(guò)C++已經(jīng)好長(zhǎng)時(shí)間了,但是一直都沒(méi)機(jī)會(huì)去寫(xiě)C++代碼,所以很多東西都已經(jīng)給遺忘了。下面是關(guān)于類的static,const,static const , const static成員的初始化問(wèn)題的學(xué)習(xí)筆記。
  1.類里的const成員初始化:
  在一個(gè)類里建立一個(gè)const時(shí),不能給它初值。像
  class foo
  {
  private:
  const int i = 100;
  public:
  foo(){}
  ......
  };
  這樣的初始化方式是不能通過(guò)編譯的,因?yàn)樵陬悓?duì)象里進(jìn)行了存儲(chǔ)空間分配,編譯器不能知道const的內(nèi)容是什么,所以不能把它用作編譯期間的常量。這意味著對(duì)于類里的常數(shù)表達(dá)式來(lái)說(shuō),const就像它在C中一樣沒(méi)有作用。因此這個(gè)初始化工作必須發(fā)生在構(gòu)造函數(shù)里,并且,要在構(gòu)造函數(shù)的某個(gè)特別的地方。因?yàn)閏onst必須在建立它的地方被初始化,所以在構(gòu)造函數(shù)的主體里,const必須已初始化了,否則,就只有等待,直到在構(gòu)造函數(shù)主體以后的某個(gè)地方給它初始化,這意味著過(guò)一會(huì)兒才給const初始化。當(dāng)然,無(wú)法防止在在構(gòu)造函數(shù)主體的不同地方改變const的值。
  構(gòu)造函數(shù)初始化表達(dá)式
  class foo
  {
  private:
  const int i = 100;
  public:
  foo(){......}
  ......
  };
  如果構(gòu)造函數(shù)是在類外定義,則可以這樣寫(xiě):
  class foo
  {
  private:
  const int i;
  public:
  foo();
  ......
  };
  foo::foo(): i(100){......}
  2.類里的static成員初始化:
  類中的static變量是屬于類的,而不是屬于某個(gè)對(duì)象,它在整個(gè)程序的運(yùn)行過(guò)程中只有一個(gè)副本,因此不
  能在定義對(duì)象時(shí)對(duì)變量初始化,就是不能用構(gòu)造函數(shù)來(lái)初始化。其正確的初始化方式是:
  <數(shù)據(jù)類型><類名>::<靜態(tài)數(shù)據(jù)成員名>=<值> ,例如
  class foo
  {
  private:
  const int i;
  public:
  foo();
  ......
  };
  int foo::i=100;
  這表明:
  (1)初始化在類體外進(jìn)行,而前面不加static,以免與一般靜態(tài)變量或?qū)ο笙嗷煜?BR>  (2)初始化時(shí)不加該成員的訪問(wèn)權(quán)限控制符private,public等。
  (3)初始化時(shí)使用作用域運(yùn)算符來(lái)標(biāo)明它所屬類,因此,靜態(tài)數(shù)據(jù)成員是類的成員,而不是對(duì)象的成員。
  3.類里的static const 和const static成員初始化:
  在找static成員的初始化學(xué)習(xí)資料時(shí),筆者發(fā)現(xiàn)了網(wǎng)上有很多關(guān)于 static const 成員,也就是全局的靜態(tài)常量的初始化的資料。const成員要在構(gòu)造函數(shù)初始化,而static成員在需要在在類體外初始化,那么static const 和 const static 的成員應(yīng)該在哪里進(jìn)行初始化呢?這兩個(gè)寫(xiě)法又會(huì)有什么不一樣嗎?這引起了筆者的興趣。在網(wǎng)上查閱了相關(guān)資料和做了相關(guān)實(shí)驗(yàn)后,筆者確認(rèn)了只要用static關(guān)鍵字修飾的成員的初始化方式和只有static關(guān)鍵字修飾的成員一樣,都必須在類體外初始化,而無(wú)論static在const前面還是后面。比如:
  class Test{
  public:
  static const int MASK1;
  static const int MASK2;
  };
  const int Test::MASK1 = 0xFFFF;
  const int Test::MASK2 = 0xFFFF;
  至于兩種方式的區(qū)別,我還不知道,下面是在網(wǎng)上找到的一個(gè)關(guān)于它們區(qū)別的說(shuō)法,僅供家參考:
  沒(méi)有區(qū)別。
  一個(gè)是靜態(tài)常量,
  一個(gè)是常量靜態(tài),
  靜態(tài)都將存儲(chǔ)在全局變量區(qū)域,其實(shí)最后結(jié)果都是一樣的。
  可能在不同編譯器內(nèi),不同處理,但是最后結(jié)果是一樣的。
  

百分百考試網(wǎng) 考試寶典

立即免費(fèi)試用