<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          類的封裝與繼承

          作者: 時(shí)間:2009-12-14 來(lái)源:網(wǎng)絡(luò) 收藏

          而合理的做法如下所述。
          規(guī)則9-3-3(強(qiáng)制): 將成員函數(shù)聲明為static或者const類型。
          這是因?yàn)?,將成員函數(shù)聲明為static或者const類型,可以限制對(duì)于其非靜態(tài)數(shù)據(jù)成員的訪問(wèn),從而避免無(wú)意識(shí)下對(duì)數(shù)據(jù)進(jìn)行的修改。
          每一個(gè)對(duì)象都有和簡(jiǎn)單變量類似的建立過(guò)程,我們希望也能夠像對(duì)待普通變量那樣,當(dāng)通過(guò)聲明語(yǔ)句分配內(nèi)存空間之后,立即寫(xiě)入特定的數(shù)據(jù)。但由于對(duì)象的復(fù)雜性以及封裝需求決定了直接賦值不可行,為此C++嚴(yán)格規(guī)定了初始化程序的接口形式,并有一套自動(dòng)的調(diào)用機(jī)制。這里所說(shuō)的初始化程序就是構(gòu)造函數(shù),這個(gè)特殊的成員函數(shù)以及與之對(duì)應(yīng)的析構(gòu)函數(shù),需要在封裝時(shí)給予特別的注意。
          規(guī)則12-1-1(強(qiáng)制): 對(duì)象的動(dòng)態(tài)類型不允許在其構(gòu)造函數(shù)或者析構(gòu)函數(shù)體內(nèi)被調(diào)用。
          在對(duì)象的構(gòu)造和析構(gòu)過(guò)程中,它最終的類型可能會(huì)與完整構(gòu)造的對(duì)象不一樣。在構(gòu)造函數(shù)或者析構(gòu)函數(shù)中使用對(duì)象的動(dòng)態(tài)類型,將可能與開(kāi)發(fā)人員的預(yù)期不一致。對(duì)象的動(dòng)態(tài)類型使用在如下的結(jié)構(gòu)中:
          ◆典型的具有虛函數(shù)或者其基類中具有虛函數(shù);
          ◆dynamic_cast;
          ◆對(duì)于虛函數(shù)的虛調(diào)用。
          此規(guī)則同樣禁止由構(gòu)造函數(shù)和析構(gòu)函數(shù)產(chǎn)生的對(duì)純虛函數(shù)的調(diào)用。那樣的調(diào)用將導(dǎo)致未定義的行為。下面來(lái)看一個(gè)較為特殊的函數(shù)――拷貝構(gòu)造函數(shù),以結(jié)束對(duì)封裝的討論。
          拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參是本類的對(duì)象的引用。其作用是使用1個(gè)已經(jīng)存在的對(duì)象(由拷貝構(gòu)造函數(shù)的參數(shù)指定的對(duì)象)去初始化1個(gè)新的同類的對(duì)象。
          規(guī)則12-8-1(強(qiáng)制): 拷貝構(gòu)造函數(shù)只允許對(duì)基類以及它所在類的非靜態(tài)成員進(jìn)行初始化。
          如果編譯器接口發(fā)現(xiàn)1個(gè)對(duì)拷貝構(gòu)造函數(shù)的調(diào)用是冗余的,它將忽略該函數(shù)調(diào)用。即使拷貝構(gòu)造函數(shù)在構(gòu)造對(duì)象之外還有其他功能,也不例外。這稱作拷貝省略。因此當(dāng)修改程序狀態(tài)的次數(shù)不能確定時(shí),保證不使用拷貝構(gòu)造函數(shù)修改程序的狀態(tài),就顯得極為重要。相關(guān)例程如下:

          本文引用地址:http://www.ex-cimer.com/article/173524.htm


          上述例子里,在所有函數(shù)調(diào)用之后,m_static的數(shù)值由使用的是何種編譯器來(lái)決定,不是明確的值。這種不確定因素很可能帶來(lái)嚴(yán)重的安全隱患,顯然不是我們希望看到的。


          3 籌――概念與代碼的重復(fù)利用
          運(yùn)籌學(xué)中一個(gè)經(jīng)典的例子是:用2個(gè)鍋同時(shí)煎雞蛋,每個(gè)雞蛋要煎2面,每煎1面1分鐘,問(wèn)煎好3個(gè)雞蛋最少要多少時(shí)間?對(duì)這個(gè)簡(jiǎn)單例子的解決過(guò)程反映了我們的思考習(xí)慣:面對(duì)新事物新問(wèn)題時(shí),首先考慮的是如何充分利用現(xiàn)有的工具和概念,如果需要的話,在此基礎(chǔ)上作盡可能小的改動(dòng)。與派生就是這種思想在C++中的體現(xiàn)。
          按照真實(shí)世界的情況,在軟件設(shè)計(jì)中引入了類的概念。同時(shí)我們注意到人們的特定思維習(xí)慣:當(dāng)提到兩廂小轎車(chē)時(shí),遵循著“交通工具→汽車(chē)→轎車(chē)→兩廂小轎車(chē)”的具象化過(guò)程,而不是從螺絲釘開(kāi)始想象。對(duì)于C++而言,面對(duì)新對(duì)象,首先想到的不是從成員開(kāi)始重新構(gòu)建它,而是去尋找這個(gè)新對(duì)象與已有對(duì)象類別的相似之處,看能不能最大限度利用已經(jīng)給出定義的類來(lái)描述這個(gè)新對(duì)象。為新對(duì)象創(chuàng)建的特殊類,具有一般類的全部屬性與服務(wù),稱作特殊類對(duì)一般類的。1個(gè)類可以單獨(dú)存在,但是當(dāng)利用機(jī)制使用該類時(shí),該類就成為給其他類提供屬性和行為的基類,或者成為繼承其他類的屬性和行為的派生類。
          合理使用繼承可以顯著提高代碼的利用率。規(guī)則10-1-2(強(qiáng)制): 只有在菱形結(jié)構(gòu)中才允許將基類聲明為虛基類。
          虛基類會(huì)引入許多未定義和潛在的容易令人混淆的特性。因此,只有當(dāng)該基類在菱形繼承結(jié)構(gòu)中作為公共基類時(shí),才可以將其聲明為虛基類。



          關(guān)鍵詞: 繼承 C語(yǔ)言

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();