久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

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

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年03月13日   【字體:

   面向?qū)ο笤O(shè)計是一種思想,而C++恰好是一種面向?qū)ο蟮恼Z言,在C++中設(shè)計類一般都會采用繼承基類(父類),設(shè)計派生類(子類),繼承和動態(tài)綁定的結(jié)合就巧妙的實現(xiàn)了實際的問題。但是如何設(shè)計出一個強大的類呢?今天在學(xué)習(xí)了純虛函數(shù)以后,我又覺得分層設(shè)計的思想真的是一個非常棒的設(shè)計思想。
 
    首先說明一下我只是一個初學(xué)者,寫出來的東西可能會有錯誤,說實在的沒寫過多少代碼,但是我認為寫代碼是一個熟練的過程,一個完成思想的過程。只有有了思想,才能完成好的設(shè)計,不斷的思考,不斷的總結(jié)才能學(xué)到新學(xué)到的東西,才能達到更高的目標(biāo)。
 
    在C++中虛函數(shù)是指將一個類中的虛函數(shù)后面加上=0,就說明該虛函數(shù)為純虛函數(shù)。一般該函數(shù)設(shè)置為純虛函數(shù),那么該函數(shù)也就沒有再次定義的必要了,因為存在純虛函數(shù)的類就是一個抽象類,是不能夠創(chuàng)建對象的,不能創(chuàng)建對象也就不會主動的調(diào)用該函數(shù),哪怕在動態(tài)綁定的情況下也不會,因此不需要為該函數(shù)定義相關(guān)的操作,實質(zhì)上在此處聲明只是說明在該派生類中需要重寫基類的虛函數(shù),至于是否真的復(fù)寫,不要去關(guān)心。

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

   抽象類的作用主要是幫助完成實際派生類的設(shè)計,為什么這么說呢?如果我們只創(chuàng)建一個基類,直接繼承基類創(chuàng)建實際的派生類,存在很多的問題,為什么這么說呢?比如說我要創(chuàng)建一個人的類,我們每一個人都是一個人的對象,在人的基類中一般只是包含了人的共性,不可能將某一個人的特殊定義到類中,當(dāng)然為了繼承,肯定也會創(chuàng)建一系列的虛函數(shù)。如果我們每一個人都直接從該基類派生,人的個體在世界上有60多億,我們每一個人實際上就是一個派生類,因為每一個人都不同,都有自己獨特的特性(假設(shè)是一種數(shù)據(jù)對象),如果要實現(xiàn)這么多的派生類真的是一個不可想象的,而且我們可以知道很多人(類)實際上存在很多的相似性。
 
    這時我們實際上就可以采用抽象類來幫忙完成我們的設(shè)計。抽象類是連接在基類和實際派生類之間的中間類,實際派生類的直接基類是抽象類,也就說說基類是實際派生類的間接基類。在抽象層中主要完成什么操作呢?抽象層中主要完成對派生類共性數(shù)據(jù)成員的定義,為了方便派生類的數(shù)據(jù)訪問,必須設(shè)置為受保護訪問權(quán)限,創(chuàng)建純虛函數(shù),定義構(gòu)造函數(shù),應(yīng)該在初始化列表中首先創(chuàng)建基類對象,然后才能完成其他成員的初始化,有時候可能需要復(fù)制控制函數(shù)的實現(xiàn)。
 
    在實際的派生類設(shè)計過程中就不再直接從基類繼承,而是從抽象類中繼承,因為抽象類中增加了一些受保護成員數(shù)據(jù),且這些數(shù)據(jù)成員時派生類的共性,因此派生類中可以很方便的訪問。同時在該派生類中就應(yīng)該完成虛函數(shù)的復(fù)寫操作,因為動態(tài)綁定以后會直接調(diào)用該版本的虛函數(shù)。當(dāng)然有時候也要完成復(fù)制控制函數(shù)的定義。當(dāng)然可以設(shè)計很多基于抽象類的派生類。當(dāng)然在派生類中也可以增加自己的數(shù)據(jù)成員。

 

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

基本的思想如下圖所示:

 
   從上面的圖可知,我們可以在實際的派生類與基類之間增加一個中間層,這種實現(xiàn)方式不僅能夠更好的隱藏數(shù)據(jù),而且比較好的解決了我們上面提到的派生類過實現(xiàn)過于復(fù)雜的問題。因此我們可以認為抽象類實際上就是一個分層設(shè)計的方法,也可以認為是一個分成更加精細子類的方式方法,也就是說在基類的基礎(chǔ)上將對象分成很多子類(抽象類),然后在各個子類下設(shè)計新的派生類。比如在圖中的抽象類1,抽象類2是不同的,是兩種不同的分類,這候我們給予兩個抽象類的派生類當(dāng)然也就存在了差別。這樣實現(xiàn)的好處能夠避免很多的重復(fù)代碼。
 
    就假設(shè)我們要實現(xiàn)一個比較簡單的校園人類,假設(shè)已經(jīng)存在了一個人的基類(Base),那么學(xué)校的人存在很多的特征,但是我認為主要分成了3大類,主要是學(xué)生、教師、服務(wù)人員,因此可以再基類的基礎(chǔ)上派生出三個抽象類,Studtent, Teacher, Service,就如同上面的抽象類1,抽象類2,抽象類3。這時候設(shè)計一個實際的派生類也就減小了很多的冗余。但是我們覺得還是會存在很多的相似之處,比如學(xué)生類而言,還是可以再分,可以分為男女,這樣分并不是最好的,我們實際上可以按照專業(yè)分,這時候又可以再Student的基礎(chǔ)上派生出不同的學(xué)生專業(yè)抽象類,在各個專業(yè)下又可以分為博士、研究生、大學(xué)生抽象類,在這些抽象類的基礎(chǔ)上還可以分為男女抽象類,到這時就可以直接完成具體每一個派生類的實現(xiàn)啦,這時候的直接基類就是男女學(xué)生抽象類,這樣就形成了一個多層次的分解問題,將一個大的問題分解成了很多的子類,在子類的基礎(chǔ)上在分成更細的子類,最后到達一個精細的抽象子類,這時實現(xiàn)一個具體的派生類就會非常的方便。也就減少了很多的冗余代碼,雖然設(shè)計的類更多了,但是實現(xiàn)的方式會更加的容易。所以說分層設(shè)計的思想是一個重要的思想,分層就能將一個大問題逐步喜歡,而在C++中純虛函數(shù)(抽象類)的運用就能夠巧妙的解決這種多層次設(shè)計問題。所以說我們的分層設(shè)計不僅僅只是單一層的,也可以是多層次的。如下圖所示:
 
    因此我們應(yīng)該掌握C++中這種純虛函數(shù)的用法,只有掌握了這種設(shè)計方法才能實現(xiàn)更加漂亮的類設(shè)計。當(dāng)然上面只是我的一些遐想。具體的實現(xiàn)過程還需要在經(jīng)后的實踐中練習(xí)。在類的設(shè)計中多增加抽象類能夠簡化類的冗余度,使得類能更加方便的被繼承。從上面的結(jié)果我們可以將分層設(shè)計看做一個樹形結(jié)構(gòu),基類就是樹的根,而實際的派生類是就是葉,而那些中間的抽象層就是節(jié)點。

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 亚洲精品久久久久久久久久久久久 | 四虎最新地址 | 在线观看免费福利 | 国产在线资源 | 亚洲国产精品人人爽夜夜爽 | 亚洲国产精品99久久久久久久久 | 国产99久久精品一区二区永久免费 | 又黄又爽的网站 | 亚洲在线看 | 国产一区欧美 | 久久亚洲一区二区三区四区 | 观看av| 成年人在线观看视频 | 中文字幕在线观看一区 | 午夜影院在线观看版 | 国产精品污www一区二区三区 | 九九激情视频 | 久久久久久av | 中文字幕高清av | 一区二区在线 | 亚洲区视频 | 日本中文字幕日韩精品免费 | 欧美成人综合 | 二区三区在线观看 | 又黄又爽的网站 | 一区二区精品 | 91精品国产91久久久久游泳池 | 久久精品小短片 | 国产三区av | 国产欧美日韩精品一区二区三区 | 成人在线播放网站 | 亚洲v区 | 日本三级播放 | 九色在线观看 | 亚洲国产精品久久久久久 | 日韩成人影院在线观看 | 国产精品亚洲欧美日韩一区在线 | 91视频入口| 极品电影院 | 午夜激情在线 | 精品国产欧美 |