抽象類中的已經宣告方法0為純虛擬函式,其他方法不宣告

2021-03-03 21:04:09 字數 3944 閱讀 4042

1樓:匿名使用者

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

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

2樓:匿名使用者

修改之前

virtual fun1();

virtual fun2();

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

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

c++中虛擬函式的作用是什麼?它應該怎麼用呢?

3樓:莫斯利安純牛奶

c++中虛擬函式的作用:

1、簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛擬函式。

2、實現多型性,多型性是將介面與實現進行分離。

3、當基類指標指向一個子類物件,通過這個指標呼叫子類和基類同名成員函式的時候,基類宣告為虛擬函式就會調子類的這個函式,不宣告就會呼叫基類的。

c++中虛擬函式的用法:

1、比如你有個遊戲,遊戲裡有個虛基類叫「怪物」,有純虛擬函式 「攻擊」。

2、派生出了三個子類「狼」「蜘蛛」「蟒蛇」,都實現了自己不同的「攻擊」函式,比如狼是咬人,蜘蛛是吐絲,蟒蛇把你纏起來。

擴充套件資料:

使用虛擬函式的注意事項:

1、包含虛擬函式的類指標列表會增大。

2、虛解構函式

(1)解構函式的作用是在物件撤銷之前做必要的「清理現場」的工作。

(2)當派生類的物件從記憶體中撤銷的時候,會先先呼叫派生類的解構函式然後再呼叫基類的解構函式。

(3)當我們new一個臨時物件時,若基類中包含解構函式,並且定義了一個指向該基類的指標變數。

3、建構函式不能宣告為虛擬函式

建構函式不能宣告為虛擬函式。如果宣告為虛擬函式,編譯器會自動報出。

4、不在析構或者構造過程中呼叫虛擬函式

在解構函式或者是建構函式中,我們絕對不能呼叫虛擬函式。即使,我們在建構函式或者解構函式中呼叫虛擬函式,也不會下降至派生類中呼叫函式。

4樓:木子青耶

虛擬函式的作用:

允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。

虛擬函式的使用方法是:

1.在基類用virtual宣告成員函式為虛擬函式可以在派生類中重新定義此函式,為它賦予新的功能,並能方便地被呼叫。

在類外定義虛擬函式時,不必再加virtual。

2.在派生類中重新定義此函式,要求函式名、函式型別、函式引數個數和型別全部與基類的虛擬函式相同,並根據派生類的需要重新定義函式體。

在派生類重新宣告該虛擬函式時,可以加virtual,也可以不加,但習慣上一般在每一層宣告該函式時都加virtual,使程式更加清晰。

3.如果在派生類中沒有對基類的虛擬函式重新定義,則派生類簡單地繼承其直接基類的虛擬函式。

4.定義一個指向基類物件的指標變數,並使它指向同一類族中需要呼叫該函式的物件。

通過該指標變數呼叫此虛擬函式,此時呼叫的就是指標變數指向的物件的同名函式;

虛擬函式與指向基類物件的指標變數的配合使用,就能方便地呼叫同一類族中不同類的同名函式,只要先用基類指標指向即可。

5樓:匿名使用者

c++中虛擬函式的作用:

1、為了方便使用多型特性,我們常常需要在基類中定義虛擬函式。

2、在很多情況下,基類本身生成物件是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。

為了解決上述問題,引入了純虛擬函式的概念,將函式定義為純虛擬函式(方法:virtual returntype function()= 0;),則編譯器要求在派生類中必須予以重寫以實現多型性。

同時含有純虛擬函式的類稱為抽象類,它不能生成物件。這樣就很好地解決了上述兩個問題。

c++中虛擬函式的用法:

比如你有個遊戲,遊戲裡有個虛基類叫「怪物」,有純虛擬函式 「攻擊」。然後派生出了三個子類「狼」「蜘蛛」「蟒蛇」,都實現了自己不同的「攻擊」函式,比如狼是咬人,蜘蛛是吐絲,蟒蛇把你纏起來。

然後出現好多怪物的時候就可以定義一個 虛基類指標陣列,把各種怪物的指標給它,然後迭代迴圈的時候直接 monster[i]->attack() 攻擊玩家就行了,大概見下圖:

6樓:匿名使用者

c++中虛擬函式的作用:

1、方便使用多型特性。

2、在很多情況下,基類本身生成物件是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。

為了解決上述問題,引入了純虛擬函式的概念,將函式定義為純虛擬函式(方法:virtual returntype function()= 0;),則編譯器要求在派生類中必須予以重寫以實現多型性。同時含有純虛擬函式的類稱為抽象類,它不能生成物件。

這樣就很好地解決了上述兩個問題。

宣告瞭純虛擬函式的類是一個抽象類。所以,使用者不能建立類的例項,只能建立它的派生類的例項。

純虛擬函式最顯著的特徵是:它們必須在繼承類中重新宣告函式(不要後面的=0,否則該派生類也不能例項化),而且它們在抽象類中往往沒有定義。

定義純虛擬函式的目的在於,使派生類僅僅只是繼承函式的介面。

3、純虛擬函式的意義,讓所有的類物件(主要是派生類物件)都可以執行純虛擬函式的動作,但類無法為純虛擬函式提供一個合理的預設實現。所以類純虛擬函式的宣告就是在告訴子類的設計者,「你必須提供一個純虛擬函式的實現,但我不知道你會怎樣實現它」。

虛擬函式的使用方法是:

1、在基類用virtual宣告成員函式為虛擬函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便地被呼叫。在類外定義虛擬函式時,不必再加virtual。

2、在派生類中重新定義此函式,要求函式名、函式型別、函式引數個數和型別全部與基類的虛擬函式相同,並根據派生類的需要重新定義函式體。

c++規定,當一個成員函式被宣告為虛擬函式後,其派生類中的同名函式都自動成為虛擬函式。因此在派生類重新宣告該虛擬函式時,可以加virtual,也可以不加,但習慣上一般在每一層宣告該函式時都加virtual,使程式更加清晰。如果在派生類中沒有對基類的虛擬函式重新定義,則派生類簡單地繼承其直接基類的虛擬函式。

3、定義一個指向基類物件的指標變數,並使它指向同一類族中需要呼叫該函式的物件。

4、通過該指標變數呼叫此虛擬函式,此時呼叫的就是指標變數指向的物件的同名函式。通過虛擬函式與指向基類物件的指標變數的配合使用,就能方便地呼叫同一類族中不同類的同名函式,只要先用基類指標指向即可。

如果指標不斷地指向同一類族中不同類的物件,就能不斷地呼叫這些物件中的同名函式。這就如同前面說的,不斷地告訴計程車司機要去的目的地,然後司機把你送到你要去的地方。

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

7樓:鳶尾的念想

純虛擬函式和抽象類:

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

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

class 類名;

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

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

8樓:齊哥

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

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

html 。

抽象類中的方法不一定是抽象方法嗎

當然是可以的,如下 public abstract class apublic abstract void method2 public static void mehtod3 如果一個類中含有abstract方法,那麼這個類必須用abstract來修飾,當然abstract類也可以沒有abstra...

C中抽象類和介面的區別,java中抽象類和介面的區別?

c 一 抽象類 抽象類是特殊的類,只是不能被例項化 除此以外,具有類的其他特性 重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能宣告於抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自一個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它...

c抽象類內是否要有方法的實現,C 抽象類可以有構造方法嗎,若是有如何實現及呼叫

定義抽象類和抽象方法 abstract 抽象類特點 1 不能初始化的類被叫做抽象類,它們只提供部分實現,但是另一個類可以繼承它並且能建立它們的例項 2 一個抽象類可以包含抽象和非抽象方法,當一個類繼承於抽象類,那麼這個派生類必須實現所有的的基類抽象方法 3 通過宣告派生類也為抽象,我們可以避免所有或...