類,抽象基類,接口類三者間的區別與聯系(C++)


聯系很明顯,三個都是‘類’,如果讀者對類的概念不清楚,可以參照wid的博文http://www.cnblogs.com/mr-wid/archive/2013/02/18/2916309.html。

下面着重解釋一下區別,但此文僅是個人理解,如果覺得我說的不對的地方,還請賜教。

(1)結構上的區別:

    普通類:數據+方法+實現

    抽象類:數據+方法(一定包含虛方法n>=1)+部分方法的實現

    接口類:方法(純虛方法)

(2)概念上的區別:

    普通的類和另外兩個的區別很明顯,普通類就是貓狗之類的,而抽象類就是動物類。但接口類與抽象類的區別不太明顯,下面就說說這兩個類。

    接口類算是從抽象類中分離出來的特殊的抽象類(純虛方法且不含數據的抽象類),抽象類側重點在‘類’的角度上,而接口類則側重於‘方法’。引用《大話設計模式》中的一句話就是,“類是對對象的抽象,抽象類是對類的抽象,而接口是對行為的抽象。”

    舉個例子,貓、狗類(普通的具體類)繼承於動物類(抽象類),而貓、狗類又有共同的‘吃飯’的行為,這時,我們就可以寫一個‘吃飯’的接口類,讓貓、狗類繼承並實現這個方法。

    抽象類是從子類中發現公共的東西泛化出父類,從而讓子類繼承父類,但是你寫接口類的時候不一定知道子類的存在,但就如‘吃飯’一樣,肯定都是要的,只是具體的子類如何實現就要看子類是啥了,貓吃魚、狗啃骨頭,具體‘吃飯’的方法在子類中實現。

看《大話設計模式》時總結出來的,如果還不理解,可以直接去看那本書附錄A。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM