C++抽象类
概念
在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。
抽象類往往用來表征對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。
通常在編程語句中用 abstract 修飾的類是抽象類。在C++中,含有純虛擬函數的類(即:包含至少一個純虛函數的類)稱為抽象類,它不能生成對象。派生自抽象類的類必須實現純虛函數或者它們必須也是抽象類。
抽象類是不完整的,它只能用作基類。在面向對象方法中,抽象類主要用來進行類型隱藏和充當全局變量的角色。
抽象類往往用來表征對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。
參考來源
此聲明與上一個聲明的唯一區別是,PrintBalance?是用 pure 說明符 (= 0) 聲明的。
抽象類特點
抽象類不能直接實例化,并且對抽象類使用 new 運算符會導致編譯時錯誤;
抽象方法只能聲明于抽象類中,且不包含任何實現,派生類必須覆蓋它們;
重要的是抽象類可以包括抽象方法,這是普通類所不能的,但同時也能包括普通的方法。
限制
變量或成員數據
顯式轉換的類型
自變量類型
顯式轉換的類型
函數返回類型
可以為抽象類定義純虛函數,但是只能通過使用以下語法直接調用:
抽象類名稱::函數名稱()
這有助于設計基類包括純虛析構函數的類層次結構,因為在銷毀對象的過程中始終會調用基類析構函數。請考慮以下示例:
//?用純虛函數聲明一個抽象基類. //?deriv_RestrictionsonUsingAbstractClasses.cpp class?base?{ public:base()?{}virtual?~base()=0; };//?Provide?a?definition?for?destructor. base::~base()?{}class?derived:public?base?{ public:derived()?{}~derived(){} };int?main()?{derived?*pDerived?=?new?derived;delete?pDerived; }刪除?pDerived?指向的對象時,將調用類?derived?的析構函數,然后調用類?base的析構函數。純虛函數的空實現確保至少函數的某個實現存在。
在前面的示例中,純虛函數?base::~base?是從?derived::~derived?隱式調用的。
也可使用完全限定的成員函數名稱顯式調用純虛函數。
參考鏈接
C++接口與抽象類
接口是一個概念。它在C++中用抽象類來實現,在C#和Java中用interface來實現。
與抽象類的關系
包含未實現的方法聲明;
不能實例化;
派生類必須實現未實現的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員)。
與抽象類的區別
- 抽象類當中可以存在非抽象的方法,可接口不能,且它里面的方法只是一個聲明必須用public來修飾沒有具體實現的方法。
抽象類是對象的抽象,然而接口是一種行為規范。
抽象類中的成員變量可以被不同的修飾符來修飾,可接口中的成員變量默認的都是靜態常量(static final)。
接口基本上不具備繼承的任何具體特點,它僅僅承諾了能夠調用的方法; 而類可以實現無限個接口,但僅能從一個抽象(或任何其他類型)類繼承,從抽象類派生的類仍可實現接口,從而得出接口是用來解決多重繼承問題的。
聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
總結
- 上一篇: C++ inline 函数简介
- 下一篇: cad看图王如何显示线宽(如何自学cad