抽象類為什麼不能例項化?

  • 作者:由 匿名使用者 發表于 攝影
  • 2022-11-01

抽象類為什麼不能例項化?sky不用太多sky 2018-04-03

抽象類的概戀:

抽象類:就是包含有未定義的虛擬函式的類,也就是說只在類中聲明瞭一個抽象類,但沒有具體定義,或者把虛擬函式定義為virtual void f()=0;這樣的形式。注意函式後有一個=0。因此派生類必須實現這個函式,如果派生類沒有實現這個函式,則這個派生類也是抽象的。

抽象類為什麼不能例項化物件:因為抽象類中包含有沒有定義的函式,因此不能用抽象類來例項化物件。但可以宣告抽象類的指標指向派生類。

示例:

class A{public: virtual void f()=0;};  //宣告一個抽象類

class B:public A{public: void f(){cout<<“B”<

void main()

{A ma; //錯誤,因為類A是抽象類,含有未實現的函式f()。因此不能建立物件

B mb;

A *p=&mb; //可以建立抽象類的指標指向派生類物件。

}

抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。

通常在程式設計語句中用 abstract 修飾的類是抽象類。在C++中,含有純虛擬函式的類稱為抽象類,它不能生成物件;在java中,含有抽象方法的類稱為抽象類,同樣不能生成物件。

在面向物件的概念中,所有的物件都是透過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果一個類中沒有包含足夠的資訊來描繪一個具體的物件,這樣的類就是抽象類。 [1]

抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。 [1]

比如,在一個圖形編輯軟體的分析設計過程中,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們又都屬於形狀這樣一個概念,形狀這個概念在問題領域並不是直接存在的,它就是一個抽象概念。而正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類是不能夠例項化的。

Top