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

8.8 構(gòu)造函數(shù)(2) [翻譯]

原文 from www.learncpp.com/cpp-tutorial/88-constructors-part-ii/

私有構(gòu)造函數(shù)

偶爾,我們不想讓用戶在class外使用特殊的構(gòu)造函數(shù)。為了實(shí)現(xiàn)這個(gè)想法,我們可以將構(gòu)造函數(shù)設(shè)定為私有的。

   1: class Book
   2: {
   3: private:
   4:     int m_nPages;
   5:  
   6:     // This constructor can only be used by Book's members
   7:     Book() // private default constructor
   8:     {
   9:          m_nPages = 0;
  10:     }
  11:  
  12: public:
  13:     // This constructor can be used by anybody
  14:     Book(int nPages) // public non-default constructor
  15:     {
  16:         m_nPages = nPages;
  17:     }
  18: };
  19:  
  20: int main()
  21: {
  22:     Book cMyBook; // fails because default constructor Book() is private
  23:     Book cMyOtherBook(242); // okay because Book(int) is public
  24:  
  25:     return 0;
  26: }

public的構(gòu)造函數(shù)具有的一個(gè)問(wèn)題是它們沒(méi)有提供任何控制一個(gè)特殊的類(lèi)能夠被創(chuàng)建多少次的方法。如果一個(gè)public構(gòu)造函數(shù)存在,就能夠人用戶的愿望實(shí)例化足夠多的類(lèi)對(duì)象。通常限制用戶只能夠?qū)嵗粋€(gè)特殊的類(lèi)是有用的。有很多方式實(shí)現(xiàn)單例(singletons),最常用的是使用私有或保護(hù)的構(gòu)造函數(shù)。

 

Constructor chaining and initialization issues

當(dāng)你實(shí)例化一個(gè)新的對(duì)象的時(shí)候,對(duì)象構(gòu)造函數(shù)被編譯器隱式調(diào)用。有兩個(gè)狀況可能是新手經(jīng)常犯錯(cuò)的地方:

1)有時(shí)候,一個(gè)類(lèi)具有一個(gè)能夠做另一個(gè)構(gòu)造函數(shù)相同工作的構(gòu)造函數(shù),并增加額外的工作。處理器讓一個(gè)構(gòu)造函數(shù)調(diào)用另一個(gè)構(gòu)造函數(shù),叫做constructor chaining。如果你嘗試這樣做,它能夠通過(guò)編譯,但是它將不能夠正確的工作,然后你就得花費(fèi)大量的時(shí)間去找出原因,甚至使用debugger。但是,構(gòu)造函數(shù)允許調(diào)用非構(gòu)造函數(shù)。通常要小心,使用已經(jīng)初始化的變量。

(譯者加:這里C++中為什么不能使用constructor chaining呢,可以跟蹤一下下面這段代碼答案就出來(lái)了:

   1: #include <iostream>
   2: using namespace std;
   3:  
   4: class Foo 
   5: {
   6:     int m_nValue;
   7: public:
   8:     Foo() { m_nValue = 1; }
   9:     
  10:     // 這里沒(méi)用到a,因?yàn)橹皇且粋€(gè)示例
  11:     Foo(int a) { Foo(); }
  12:     
  13:     ~Foo() { cout << "destructed" << endl; }
  14:     
  15:     int getValue() { return m_nValue; }
  16: };
  17:  
  18: int main()
  19: {
  20:     Foo cTmp(1);
  21:     cout << cTmp.getValue1();
  22: }

盡管你能將一個(gè)構(gòu)造函數(shù)中的代碼復(fù)制到另一個(gè)構(gòu)造函數(shù)中,重復(fù)性的代碼會(huì)使得你的類(lèi)變得臃腫。最好的解決方法是創(chuàng)建一個(gè)非構(gòu)造函數(shù)實(shí)現(xiàn)公共的初始化。

   1: class Foo
   2: {
   3: public:
   4:     Foo()
   5:     {
   6:         // code to do A
   7:     }
   8:  
   9:     Foo(int nValue)
  10:     {
  11:         // code to do A
  12:         // code to do B
  13:     }
  14: };

變?yōu)?/p>

   1: class Foo
   2: {
   3: public:
   4:     Foo()
   5:     {
   6:         DoA();
   7:     }
   8:  
   9:     Foo(int nValue)
  10:     {
  11:         DoA();
  12:         // code to do B
  13:     }
  14:  
  15:     void DoA()
  16:     {
  17:         // code to do A
  18:     }
  19: };

2)也許你想要一個(gè)成員函數(shù)實(shí)現(xiàn)將成員變量設(shè)定為默認(rèn)值。因?yàn)槟憧赡芤呀?jīng)通過(guò)構(gòu)造函數(shù)實(shí)現(xiàn)了,你也許會(huì)在成員函數(shù)中調(diào)用構(gòu)造函數(shù)。但是這在C++中是不合法的。

類(lèi)似1)中實(shí)現(xiàn)的方式

   1: class Foo
   2: {
   3: public:
   4:     Foo()
   5:     {
   6:         Init();
   7:     }
   8:  
   9:     Foo(int nValue)
  10:     {
  11:         Init();
  12:         // do something with nValue
  13:     }
  14:  
  15:     void Init()
  16:     {
  17:         // code to init Foo
  18:     }
  19: };

如果Init中有動(dòng)態(tài)分配內(nèi)存的情況,需要更加小心的對(duì)待了。在執(zhí)行相應(yīng)的操作之前,應(yīng)該進(jìn)行一定的檢測(cè)。避免錯(cuò)誤的發(fā)生。

posted on 2012-05-30 22:06 鐘謝偉 閱讀(1219) 評(píng)論(0)  編輯 收藏 引用


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


<2012年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(1)

隨筆檔案

IT網(wǎng)站

My Friends

搜索

最新評(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>
            国产亚洲亚洲| 亚洲高清视频一区| 亚洲伊人一本大道中文字幕| 欧美激情1区| 欧美成人精精品一区二区频| 亚洲国产精品久久久久| 欧美大片va欧美在线播放| 免费人成精品欧美精品| 91久久国产综合久久蜜月精品| 欧美激情一区二区三区在线| 欧美国产视频一区二区| 亚洲一区二区三区精品视频| 这里只有精品丝袜| 国产一区二区三区黄| 欧美成人免费网站| 欧美色视频在线| 久久精品av麻豆的观看方式 | 最新亚洲一区| 亚洲日韩中文字幕在线播放| 欧美高清在线观看| 欧美亚洲日本网站| 美女精品在线| 午夜欧美不卡精品aaaaa| 久久激情视频免费观看| 99riav国产精品| 性久久久久久久久| aa级大片欧美三级| 欧美在线播放| 中文精品在线| 巨胸喷奶水www久久久免费动漫| 亚洲午夜久久久久久久久电影网| 欧美在线观看一区二区三区| av成人免费观看| 久久久91精品国产| 午夜国产精品视频| 欧美高清视频一区| 久久婷婷一区| 国产精品视频一二三| 亚洲青涩在线| 亚洲成在线观看| 午夜亚洲福利在线老司机| 在线视频一区观看| 美日韩精品视频| 久久久成人精品| 国产精品成人一区| 亚洲精品乱码久久久久久久久| 国产亚洲人成a一在线v站| 在线一区二区三区四区五区| 亚洲人成网站影音先锋播放| 久久九九精品| 久久久噜噜噜久久中文字幕色伊伊| 欧美色视频在线| 亚洲免费黄色| 99精品热视频只有精品10| 久久一二三区| 免费欧美在线| 在线激情影院一区| 久久久xxx| 狼狼综合久久久久综合网 | 久久亚洲春色中文字幕久久久| 午夜在线电影亚洲一区| 欧美午夜片在线免费观看| 最近看过的日韩成人| 亚洲国产综合91精品麻豆| 久久久久久9999| 免费人成网站在线观看欧美高清| 国产一区二区三区av电影| 欧美一区二区三区在线播放| 欧美一区二区在线免费播放| 国产精品自拍在线| 亚洲一区欧美一区| 欧美在线高清视频| 国产亚洲一区在线| 久久国产精彩视频| 欧美99在线视频观看| 亚洲国产欧美一区二区三区久久| 免费不卡中文字幕视频| 亚洲第一中文字幕| 亚洲天堂黄色| 国产亚洲精品综合一区91| 久久激情五月丁香伊人| 免费观看日韩av| 日韩视频免费观看高清在线视频| 欧美精品在线免费观看| 一本色道婷婷久久欧美| 欧美亚洲专区| 亚洲高清不卡在线| 欧美日韩激情小视频| 亚洲无限av看| 美日韩精品免费| 一区二区三区 在线观看视| 欧美四级在线观看| 久久av在线| 亚洲精品色婷婷福利天堂| 亚洲欧美精品在线| 伊人久久av导航| 欧美日韩第一区| 欧美一级大片在线免费观看| 欧美二区在线| 欧美一级免费视频| 亚洲国产精品成人一区二区 | 欧美天堂亚洲电影院在线播放 | 日韩午夜在线电影| 欧美在线影院在线视频| 亚洲国产91| 国产精品免费久久久久久| 久久中文字幕导航| 亚洲一区二区精品在线| 免费成人在线观看视频| 亚洲综合视频在线| 亚洲国产成人91精品| 国产精品入口麻豆原神| 蜜臀99久久精品久久久久久软件| 亚洲视频在线免费观看| 亚洲国产精品va| 久久久久国产精品一区| 在线一区免费观看| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品毛片高清在线完整版| 久久嫩草精品久久久精品| 亚洲午夜精品17c| 亚洲人成高清| 欧美高清视频一区二区三区在线观看| 欧美在线观看www| 亚洲一区二区三区精品在线| 亚洲国产欧美一区二区三区久久 | 精品51国产黑色丝袜高跟鞋| 国产精品美女xx| 欧美日韩在线电影| 欧美高清视频一区二区| 久久手机精品视频| 久久九九热免费视频| 新狼窝色av性久久久久久| 亚洲永久免费av| 在线综合视频| 亚洲桃色在线一区| 一区二区欧美日韩视频| 日韩午夜高潮| 亚洲精品视频免费观看| 亚洲激情在线播放| 亚洲激情国产| 亚洲精品极品| 日韩午夜激情电影| 中文精品视频一区二区在线观看| 亚洲精品久久久久| 日韩视频中午一区| 亚洲视频在线观看| 亚洲影院在线观看| 香蕉免费一区二区三区在线观看 | 欧美黄色影院| 亚洲黄色影院| 99视频超级精品| 亚洲一级黄色av| 亚洲欧美在线播放| 久久福利毛片| 久久夜色精品国产欧美乱| 麻豆久久婷婷| 欧美国产日韩一区二区| 欧美日韩亚洲一区三区| 国产精品高清在线观看| 国产欧美一区二区精品性| 国产一区二区三区免费观看| 在线欧美电影| 在线视频你懂得一区| 午夜天堂精品久久久久| 久久亚洲色图| 亚洲激情女人| 亚洲一区二区三区四区视频 | 日韩一区二区精品视频| 亚洲午夜在线观看| 久久精品国产精品亚洲综合 | 亚洲免费影视第一页| 久久精品欧美| 欧美日韩国产片| 国产色视频一区| 亚洲三级电影在线观看| 午夜精品久久久久久久男人的天堂| 久久精品国产999大香线蕉| 欧美韩日亚洲| 亚洲一区在线免费| 男人的天堂亚洲在线| 国产精品热久久久久夜色精品三区 | 欧美激情日韩| 国产欧美日韩综合一区在线播放| 尤物yw午夜国产精品视频| 一区二区福利| 美女精品网站| 亚洲一区二区三区涩| 欧美国内亚洲| 国模私拍一区二区三区| 一本色道久久综合亚洲精品婷婷 | 亚洲欧美欧美一区二区三区| 久久影视精品| 亚洲一本大道在线| 欧美激情视频给我| 伊人久久亚洲影院| 亚洲欧美日韩区| 亚洲精品久久久久| 久久女同精品一区二区| 国产丝袜一区二区三区|