新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C++中類的分層設計(純虛函數)

        C++中類的分層設計(純虛函數)

        作者: 時間:2016-12-01 來源:網絡 收藏
        面向對象設計是一種思想,而C++恰好是一種面向對象的語言,在C++中設計類一般都會采用繼承基類(父類),設計派生類(子類),繼承和動態綁定的結合就巧妙的實現了實際的問題。但是如何設計出一個強大的類呢?今天在學習了純虛函數以后,我又覺得分層設計的思想真的是一個非常棒的設計思想。


        首先說明一下我只是一個初學者,寫出來的東西可能會有錯誤,說實在的沒寫過多少代碼,但是我認為寫代碼是一個熟練的過程,一個完成思想的過程。只有有了思想,才能完成好的設計,不斷的思考,不斷的總結才能學到新學到的東西,才能達到更高的目標。

        在C++中虛函數是指將一個類中的虛函數后面加上=0,就說明該虛函數為純虛函數。一般該函數設置為純虛函數,那么該函數也就沒有再次定義的必要了,因為存在純虛函數的類就是一個抽象類,是不能夠創建對象的,不能創建對象也就不會主動的調用該函數,哪怕在動態綁定的情況下也不會,因此不需要為該函數定義相關的操作,實質上在此處聲明只是說明在該派生類中需要重寫基類的虛函數,至于是否真的復寫,不要去關心。

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

        //存在純虛函數的類為抽象類
        class AbstructClass:public Base
        {
        public:
        //構造函數
        AbstructClass(...):Base(...),...{}
        //析構函數
        ~AbstructClass(){...}
        //這就是純虛函數,一般func在基類中就為虛函數,因此virtual也可以不寫
        virtual func(...) const = 0;
        //保證派生類能夠訪問數據成員,必須設置為protected
        protected:
        //一些數據成員定義
        ...
        };

        抽象類的作用主要是幫助完成實際派生類的設計,為什么這么說呢?如果我們只創建一個基類,直接繼承基類創建實際的派生類,存在很多的問題,為什么這么說呢?比如說我要創建一個人的類,我們每一個人都是一個人的對象,在人的基類中一般只是包含了人的共性,不可能將某一個人的特殊定義到類中,當然為了繼承,肯定也會創建一系列的虛函數。如果我們每一個人都直接從該基類派生,人的個體在世界上有60多億,我們每一個人實際上就是一個派生類,因為每一個人都不同,都有自己獨特的特性(假設是一種數據對象),如果要實現這么多的派生類真的是一個不可想象的,而且我們可以知道很多人(類)實際上存在很多的相似性。

        這時我們實際上就可以采用抽象類來幫忙完成我們的設計。抽象類是連接在基類和實際派生類之間的中間類,實際派生類的直接基類是抽象類,也就說說基類是實際派生類的間接基類。在抽象層中主要完成什么操作呢?抽象層中主要完成對派生類共性數據成員的定義,為了方便派生類的數據訪問,必須設置為受保護訪問權限,創建純虛函數,定義構造函數,應該在初始化列表中首先創建基類對象,然后才能完成其他成員的初始化,有時候可能需要復制控制函數的實現。

        在實際的派生類設計過程中就不再直接從基類繼承,而是從抽象類中繼承,因為抽象類中增加了一些受保護成員數據,且這些數據成員時派生類的共性,因此派生類中可以很方便的訪問。同時在該派生類中就應該完成虛函數的復寫操作,因為動態綁定以后會直接調用該版本的虛函數。當然有時候也要完成復制控制函數的定義。當然可以設計很多基于抽象類的派生類。當然在派生類中也可以增加自己的數據成員。

        //實際派生類從抽象類中繼承
        class ActualClass : public AbstructClass
        {
        public:
        ActualClass(...):AbstructClass(...),...{}
        //派生類中復寫虛函數
        func()
        {...}
        private:
        //派生類的一些數據
        ...
        };

        基本的思想如下圖所示:


        從上面的圖可知,我們可以在實際的派生類與基類之間增加一個中間層,這種實現方式不僅能夠更好的隱藏數據,而且比較好的解決了我們上面提到的派生類過實現過于復雜的問題。因此我們可以認為抽象類實際上就是一個分層設計的方法,也可以認為是一個分成更加精細子類的方式方法,也就是說在基類的基礎上將對象分成很多子類(抽象類),然后在各個子類下設計新的派生類。比如在圖中的抽象類1,抽象類2是不同的,是兩種不同的分類,這候我們給予兩個抽象類的派生類當然也就存在了差別。這樣實現的好處能夠避免很多的重復代碼。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 松滋市| 宝山区| 甘泉县| 毕节市| 双鸭山市| 静乐县| 鹿泉市| 焦作市| 开原市| 屯留县| 曲周县| 绥德县| 滕州市| 潜山县| 贺兰县| 弥勒县| 黑龙江省| 安庆市| 定结县| 瓦房店市| 唐海县| 石阡县| 昌江| 繁昌县| 桂东县| 林芝县| 呼图壁县| 武夷山市| 麻江县| 靖远县| 鄯善县| 永济市| 隆尧县| 平遥县| 满洲里市| 威宁| 高雄县| 巫山县| 蕉岭县| 蒙阴县| 灵丘县|