下述關於抽象類的描述中,錯誤的是

2021-03-19 18:19:25 字數 4796 閱讀 7946

1樓:匿名使用者

選c。建立類的引用,沒聽過,其他都對。

2樓:匿名使用者

選c,以下**編譯通過:

class vclass ;

int main()

一個關於c++純虛擬函式和抽象類的題

3樓:匿名使用者

a的想法確實是錯了,選a沒問題,但c也錯了a:純虛擬函式在類中可以有具體的實現**,但是有純虛擬函式的類無法有具體的實現而已.純虛擬函式在派生類中必須被重新定義,但純虛擬函式的實現**還是可以被派生類用 baseclass::

thevirtualfn();這種方式呼叫.

b:沒問題,具有純虛擬函式的類確實是抽象類.

c:派生類有權力將從基類繼承來的純虛擬函式再次定義為純虛擬函式,也有權力完全不理它.因此派生類可以再次成為抽象類.

d:沒問題.但實際上d也不夠周全,純虛擬函式的實現並非一定由派生類給出的,基類也可以給出一個實現,只不過外界能呼叫到的一定是派生類的實現而已.

4樓:匿名使用者

的確 答案錯了 該選c 對於a 純虛擬函式要在派生類來實現具體功能,但是一個抽象類可以派生多個類,所以沒有具體的實現,體現了c++多型性

5樓:匿名使用者

選c啊!!!ccccccccccccccccccccccccc

信我。我現在學c++,應該剛學完!信我!選c

下面的描述,正確的是( ) a 虛擬函式是沒有實現的函式 b純虛擬函式在基類中給出具體的實現

6樓:匿名使用者

a, 錯誤,純虛擬函式才是沒有實現的函式

b,錯誤,純虛擬函式在基類中不可以給出具體實現c,錯誤, 抽象類是有純虛擬函式的類

d,正確。

7樓:本

有一個專門解體的**,你去看一下

c++中由抽象類派生的類中可以定義新的純虛擬函式嗎

8樓:々環環々相扣

你好,這樣在c++語法中是不被允許的。所有的包含有純虛擬函式的類也即是抽象類必須是在基類(也稱父類)中定義,不能在派生類中再定義純虛擬函式。希望對你有用。。

9樓:匿名使用者

抽象類不能例項化物件。

你的三維影象類既然定義了純虛擬函式,就是抽象類了,不能例項化該類物件。

10樓:歌夢復興

正方體類和球類中都實現了getarea和getvolume這兩個方法嗎?

c++:已經在派生類中重定義了抽象類中的純虛擬函式,為什麼還不讓我用派生類定義物件!?

11樓:匿名使用者

抽象類中的純虛擬函式為:void printarea() const但是派生類中的虛擬函式為:void printarea(circle &) const、void printarea(rectangle &) const、void printarea(******** &) const

這些派生類中的函式與抽象類中純虛擬函式只是重名,但是並不是一樣的引數,當然編譯程式並不認為派生類中重寫了這個純虛擬函式

更何況你的main函式中呼叫的都是這個純虛擬函式改的方法有很多,一種是去掉所有派生類的引數,派生類實現該函式時,就只有this可以操縱了

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

12樓:莫斯利安純牛奶

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

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

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

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

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

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

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

擴充套件資料:

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

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

2、虛解構函式

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

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

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

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

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

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

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

13樓:木子青耶

虛擬函式的作用:

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

虛擬函式的使用方法是:

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

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

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

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

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

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

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

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

14樓:匿名使用者

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

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

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

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

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

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

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

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

15樓:匿名使用者

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

1、方便使用多型特性。

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

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

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

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

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

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

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

虛擬函式的使用方法是:

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

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

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

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

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

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

c抽象類和普通類的區別,java中抽象類和介面的區別?

1.c 沒有abstract.vc提供了一個inte ce 2.抽象類就是指不能例項化的類,因為它們包含了純虛方法。3.虛擬函式是在申明的時候用了關鍵字virtual的類的 非靜態 成員函式 抽象類只能作為基類,提供介面,不能有例項。普通類既可以作為基類,又可以有例項。java中抽象類和介面的區別?...

java中抽象類的構造方法抽象麼

抽象類可以有構造方法,只是不能直接建立抽象類的例項物件而已。在繼承了抽象類的子類中通過super 引數列表 呼叫抽象類中的構造方法 示例 如下 抽象類和抽象方法什麼關係?抽象類中可能有抽象方法,也可能沒有抽象方法。那位說,就跟沒說一樣,那抽象類和抽象方法都叫抽象,他們必定有關係,那關係是什麼呢?如果...

java中什麼是抽象類和抽象方法?建立有何作用

java抽象類的作用 1 通過繼承它實現多型,後期繫結,可以為將來要實現的東西做好介面,實現重用性。2 介面就是更純粹的抽象類。java中抽象類的構造方法抽象麼 抽象類可以有構造方法,只是不能直接建立抽象類的例項物件而已。在繼承了抽象類的子類中通過super 引數列表 呼叫抽象類中的構造方法 示例 ...