C的抽象類中,抽象方法和純虛擬函式區別

2021-03-10 22:42:38 字數 3123 閱讀 5858

1樓:曹朕植

問題1:含有virtual修飾符的方法稱為虛擬方法。不能像你說的那樣定義。

問題2:

1)虛擬方專法,子屬類可以選擇性重寫此方法,也可以不重寫;而抽象(abstract

)方法,子類必須重寫。

2)虛擬方法可以有實體,如:

public virtual void vt()所以,可以直接呼叫虛擬方法;而抽象方法不能宣告方法實體,public abstract void ab(),不能直接呼叫。

3)虛方法可以實現多型,而抽象方法不可以

如果一個類被宣告為abstract,

則在該抽象類中,可以存在沒有實現的方法,但該方法須宣告為abstract,

在其子類中,通過override關鍵字修辭幷包含具體的實現抽象類中的虛方法使用virtual關鍵字描述,並在子類中實現與抽象方法不同的是,虛方法可以有具體的實現,而抽象方法不可以有實現,類似於介面中規範的定義

2樓:一郎大神

1.沒有你說的純虛擬函式,但是可以用委託通過匿名函式達到類似的效果。比如使用lambda表示式,x => x * 6指定名內為x的參容數並返回x的值計算的。

如下面的示例所示,可以將此表示式傳遞給委託型別:

delegate int del(int i);

static void main(string args)2. 虛方法必須有實現部分,併為派生類提供了覆蓋該方法的選項;

抽象方法沒有提供實現部分,抽象方法是一種強制派生類覆蓋的方法,否則派生類將不能被例項化。

3樓:

問題1:含有

baivirtual修飾符的方法du稱為虛擬方法。不能像zhi你說的那dao樣定義。

問題2:

1)虛擬方法,專子類可以屬選擇性重寫此方法,也可以不重寫;而抽象(abstract

)方法,子類必須重寫。

2)虛擬方法可以有實體,如:

public virtual void vt()所以,可以直接呼叫虛擬方法;而抽象方法不能宣告方法實體,public abstract void ab(),不能直接呼叫。

3)虛方法可以實現多型,而抽象方法不可以

4樓:破曉崇明

如果來一個類被宣告為abstract,

則在該源抽象類中,可以存在沒有實現的方法,但該方法須宣告為abstract,

在其子類中,通過override關鍵字修辭幷包含具體的實現抽象類中的虛方法使用virtual關鍵字描述,並在子類中實現與抽象方法不同的是,虛方法可以有具體的實現,而抽象方法不可以有實現,類似於介面中規範的定義

5樓:匿名使用者

高質量認證每次進來都是好幾年之前的問題了。

什麼是抽象類?什麼是純虛擬函式?純虛擬函式跟一般的虛擬函式有什麼區別?

6樓:鳶尾的念想

純虛擬函式和抽象類:

含有純虛擬函式的類是抽象類,不能生成物件,只能派生。他派生的類的純虛擬函式沒有被改寫,那麼,它的派生類還是個抽象類。

定義純虛擬函式就是為了讓基類不可例項化化,因為例項化這樣的抽象資料結構本身並沒有意義.或者給出實現也沒有意義。定義純虛擬函式的一般形式為:

class 類名;

純虛擬函式是一個在基類中說明的虛擬函式,它在基類中沒有定義,要求任何派生類都定義自己的版本。純虛擬函式為各派生類提供一個公共介面。

從基類繼承來的純虛擬函式,在派生類中仍是虛擬函式。

7樓:齊哥

抽象類就是含有純虛擬函式的類。純虛擬函式跟虛擬函式在宣告形式上和意義都有很大區別。具體講解可以參見 http:

//****jizhuomi.***/software/125.

html 。

抽象類中的已經宣告一個方法=0為純虛擬函式,其他方法不宣告=0,有區別嗎?

8樓:匿名使用者

一個是虛擬函式,一個是純虛擬函式。另外你的函式忘寫返回值了。。純虛擬函式可以讓類先具有一個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。

凡是含有純虛擬函式的類叫做抽象類。這種類不能宣告物件,只是作為基類為派生類服務。除非在派生類中完全實現基類中所有的的純虛擬函式,否則,派生類也變成了抽象類,不能例項化物件。

9樓:匿名使用者

修改之前

virtual fun1();

virtual fun2();

這兩個函式在基類中還是需要實現的。

修改後,變成純需函式,所以不用實現了。

c++中抽象類中可以沒有純虛擬函式麼?

10樓:阿彌陀佛

在一個抽象類的派生類中,如果沒有重新定義基類的純虛擬函式,那麼,這個類仍然是抽象類

但這個抽象類繼承了基類的純虛擬函式

11樓:再一次的覺醒

抽象類的定義是什麼?是擁有純虛擬函式的類才是抽象類,所以不能沒有,看定義就知道了

12樓:_指丨染蒼年丶

你都說是抽象類了。。。

15. 關於純虛擬函式和抽象類的描述中,錯誤的是( )。

13樓:匿名使用者

c如果在派生類中沒有對純虛擬函式進行了定義,那這個派生類也是抽象類.不能用來定義物件

派生類中完全實現基類中所有的的純虛擬函式,否則,派生類也變成了抽象類,不能例項化物件什麼意思?

14樓:匿名使用者

基類中有純虛擬函式,如virtual int fun() = 0;

在派生類中要實現 這個純虛擬函式。

如果派生類中沒有實現這個函式,那麼等於派生類中也有了,virtual int fun() = 0;

那麼派生類也變成了抽象類,不能例項化。

抽象類:有純函式的類。

15樓:匿名使用者

純虛擬函式就是隻有宣告且=0的

派生類就是它的子類嘛,如果沒有完全實現父抽象類(完全抽象類)中的所有抽象方法(虛方法與純屬虛方法),那麼子類就成一個抽象類。

抽象類是不能直接例項化的。

這裡的抽象意思就是不是實際的。沒有完全實現的。或者說還是半成品。

虛基類與抽象類的問題,純虛類 和抽象類 有什麼關係

當繼承關係自頂來至自 下出現菱形路線時,bai最底層的派生類必然du會重複繼承最頂zhi層基類的成dao員,所以定義虛基類是為了解決這種重複繼承的問題。抽象類是包含純虛擬函式的類,它不能定義物件,在類中定義虛擬函式是為了解決基類的指標能夠呼叫派生類的函式也就是所謂的 多型性 讓一個命令實現多種響應。...

15關於純虛擬函式和抽象類的描述中,錯誤的是

c如果在派生類中沒有對純虛擬函式進行了定義,那這個派生類也是抽象類.不能用來定義物件 下述關於抽象類的描述中,錯誤的是?a.可以通過在類中定義純虛擬函式的方式定義抽象類 b.不可以建立 選c。建立類的引用,沒聽過,其他都對。選c,以下 編譯通過 class vclass int main 幾道c 選...

c抽象類虛擬方法

樓上說的基本正確,但是對初學者來說是有誤導的。虛擬方法是標記為virtual,虛擬方法可以在子類 派生類中override 有的叫重寫,有的叫過載 抽象方法標記為abstract,抽象方法沒有方法體,抽象方法必須在子類 派生類中override 有的叫重寫,有的叫過載 通俗的說就是普通方法告訴子類怎...