新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 類的封裝與繼承

        類的封裝與繼承

        作者: 時間:2009-12-14 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/173524.htm


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


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



        關鍵詞: 繼承 C語言

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 广安市| 威远县| 离岛区| 喀喇| 孝义市| 泸西县| 团风县| 安陆市| 太谷县| 崇阳县| 简阳市| 荔波县| 霸州市| 奉化市| 古田县| 屯昌县| 九龙坡区| 壤塘县| 绿春县| 喀喇沁旗| 肃宁县| 酒泉市| 桂东县| 新建县| 莫力| 原阳县| 和顺县| 耒阳市| 安图县| 腾冲县| 彩票| 柘城县| 普安县| 邯郸县| 京山县| 枝江市| 自贡市| 浦北县| 汉川市| 广水市| 柘荣县|