介面描述了類的行為和功能,而不需要完成類的特定實現。這話真抽象...
啥是抽象類:如果類中至少有乙個函式被宣告為純虛函式,則這個類就是抽象類。
那它為啥要用虛函式呢?虛函式就是作為介面,給你做文章的地方,就是給你擴充套件的地方。這就是介面的意義!
例如:class
box;
你看,純虛函式,相當於空架子,我們可以過載成自己想要的函式。
設計抽象類
(通常稱為 abc)的目的:是為了給其他類提供乙個可以繼承的適當的基類。抽象類不能被用於例項化物件,它只能作為
介面使用。
因此,如果乙個 abc 的子類需要被例項化,則必須實現每個虛函式,這也意味著 c++ 支援使用 abc 宣告介面。如果沒有在派生類(即子類)中過載純虛函式,就嘗試例項化該類的物件,會導致編譯錯誤。可用於例項化物件的類被稱為
具體類。
#include
<
iostream
>
using
namespace
std;
// 基類
class
shape
void
setheight
(inth)
protected
: int
width
; int
height; }
; // 派生類 長方形
class
rectangle
: public
shape
};//派生類 三角形
class
********
: public
shape
}; int
main
(void)
當上面的**被編譯和執行時,它會產生下列結果:
total從上面的例項中,我們可以看到乙個抽象類是如何定義乙個介面 getarea(),兩個派生類是如何通過不同的計算面積的演算法來實現這個相同的函式。上面的例子其實是個多型。rectangle
area:35
total
********
area
:17
物件導向的系統可能會使用乙個抽象基類為所有的外部應用程式提供乙個適當的、通用的、標準化的介面。然後,派生類通過繼承抽象基類,就把所有類似的操作都繼承下來。
外部應用程式提供的功能(即公有函式)在抽象基類中是以純虛函式的形式存在的。這些純虛函式在相應的派生類中被實現。
這個架構也使得新的應用程式可以很容易地被新增到系統中,即使是在系統被定義之後依然可以如此。
tri.
setwidth(5
); tri.
setheight(7
); // 輸出物件的面積
cout
<<
"total ******** area:
"<<
tri.
getarea()
<<
endl
; return0;
}
當上面的**被編譯和執行時,它會產生下列結果:
total從上面的例項中,我們可以看到乙個抽象類是如何定義乙個介面 getarea(),兩個派生類是如何通過不同的計算面積的演算法來實現這個相同的函式。rectangle
area:35
total
********
area:17
C 介面(抽象類)
介面描述了類的行為和功能,而不需要完成類的特定實現。c 介面是使用抽象類來實現的,抽象類與資料抽象互不混淆,資料抽象是乙個把實現細節與相關的資料分離開的概念。如果類中至少有乙個函式被宣告為純虛函式,則這個類就是抽象類。純虛函式是通過在宣告中使用 0 來指定的,如下所示 class box 設計抽象類...
C 介面(抽象類)
介面描述了類的行為和功能,而不需要完成類的特定實現。c 介面是使用抽象類來實現的,抽象類與資料抽象互不混淆,資料抽象是乙個把實現細節與相關的資料分離開的概念。如果類中至少有乙個函式被宣告為純虛函式,則這個類就是抽象類。純虛函式是通過在宣告中使用 0 來指定的,如下所示 class box 設計抽象類...
C 介面(抽象類)
設計抽象類 通常稱為 abc 的目的,是為了給其他類提供乙個可以繼承的適當的基類。抽象類不能被用於例項化物件,它只能作為介面使用。如果試圖例項化乙個抽象類的物件,會導致編譯錯誤。因此,如果乙個 abc 的子類需要被例項化,則必須實現每個虛函式,這也意味著 c 支援使用 abc 宣告介面。如果沒有在派...