A純虛擬函式是一種特殊的虛擬函式,它沒

2021-03-03 20:53:27 字數 3134 閱讀 3567

1樓:

簡單說來,類的每個函式都必須能夠實現(建構函式比較特殊,不定義的話,系統會自動定義,不違背法則)。純虛擬函式是沒有實現的函式,如果用來定義物件,那麼就會有函式沒有實現。不理解也沒辦法。。

是不是隻有虛擬函式才能定義為純虛擬函式,c++語法。

2樓:千鋒教育

你概念有點混淆了,這個virtual void fun()=0; 是純虛擬函式;virtual void fun(); 是虛擬函式。它們是有區別的。有純虛擬函式的類一般都是虛基類,主要用於繼承,讓子類來實現虛擬函式。

虛擬函式的作用當然是多型了~~

class base

{public:

void base::fun() {cout<<"base"

return 0;

} 如果fun 是虛擬函式顯示什麼,不是虛擬函式顯示什麼?自己試試

c++中 解構函式中可以呼叫虛擬函式麼

3樓:育知同創教育

c++中 析構

函式中不可以呼叫虛擬函式。

effective c++ 中有這樣的描述:同樣的原因也適用於析構過程。一旦派生類解構函式執行,這個物件的派生類資料成員就被視為未定義的值,所以 c++ 就將它們視為不再存在。

c++中派生類在構造時會先呼叫基類的建構函式再呼叫派生類的建構函式,析構時則相反,先呼叫派生類的解構函式再呼叫基類的建構函式。

假設一個派生類的物件進行析構,首先呼叫了派生類的析構,然後在呼叫基類的析構時,遇到了一個虛擬函式,這個時候有兩種選擇:plan a是編譯器呼叫這個虛擬函式的基類版本,那麼虛擬函式則失去了執行時呼叫正確版本的意義;plan b是編譯器呼叫這個虛擬函式的派生類版本,但是此時物件的派生類部分已經完成析構,「資料成員就被視為未定義的值」,這個函式呼叫會導致未知行為。

4樓:回頭的世界

很簡單,你定義一個虛擬函式,然後在解構函式中呼叫看看,debug除錯,能執行就證明可以!

自己動手比實踐,比問別人「記住」一些規則,更有效果!

5樓:徐霄沛

是可以的,不過,這樣呼叫沒有什麼意義,不能實現多型。

c++求助,哪個子類的虛擬函式的重新宣告是正

6樓:悽清的小白鼠

c++規定,當一個成員函式被宣告為虛擬函式後,其派生類中的同名函式都自動成為虛擬函式。因此,在子類重新宣告該虛擬函式時,可以加,也可以不加,但習慣上每一層宣告函式時都加virtual,使程式更加清晰。

一個函式既是奇函式又是偶函式這怎麼可

7樓:中公教育

有,一個最簡單的例子,f(x)=0這個函式就滿足。

要注意,除了0的常數是偶函式,你可以代入f(-x)=-f(x),就可以看出來

c++中虛擬函式如何定義,使用時應該注意什麼?

8樓:千鋒教育

/*--

定義純虛擬函式介面:virtual void f()=0; //只是提供介面,實現留給繼承類

使用時應注意:子類必須要實現該函式

--*/

#include

using namespace std;

class a

;class b:public a

};void main()

9樓:

虛擬函式的定義要這樣,virtual 返回型別+函式名(引數);

虛擬函式呼叫時要注意,在類繼承的時候,子類呼叫的虛擬函式和父類中虛擬函式的區別

10樓:匿名使用者

虛擬函式在宣告時與一般函式的不同地方就是需要新增一個標誌符virtual,在定義時和普通函式相同。在呼叫時和一般函式的呼叫也是相同的,只不過要注意多型而已。

c++中虛繼承和虛解構函式的問題

11樓:走路都帶風聲

因為基bai類的解構函式

du不是虛解構函式,

zhi所以是根據指標的型別呼叫dao解構函式,而不是根版據指權針指向物件的型別呼叫解構函式。

虛擬函式是在基類中被宣告為 virtual,並在派生類中重新定義的成員函式,可實現成員函式的動態過載。

當一個類作為基類時,它的解構函式應該為虛解構函式。

什麼是虛擬函式,c++虛擬函式講解

12樓:千鋒教育

在某基類中宣告為 virtual 並在一個或多個派生類中被重新定 義的成員函式,用法格式為:virtual 函式返回型別 函式名(參數列) ;實現多型性,通過指向派生類的基類指標或引用,訪問派生類中同名覆蓋成員函式。

虛擬函式定義:簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛擬函式。虛擬函式的作用,用專業術語來解釋就是實現多型性(polymorphi**),多型性是將介面與實現進行分離;用形象的語言來解釋就是實現以共同的方法,但因個體差異,而採用不同的策略。

虛擬函式的作用:用同一個呼叫形式,既能呼叫派生類又能呼叫基類的同名函式。

虛擬函式的使用方法是:

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

在派生類中重新定義此函式,要求函式名、函式型別、函式引數個數和型別全部與基類的虛擬函式相同,並根據派生類的需要重新定義函式體。c++規定,當一個成員函式被宣告為虛擬函式後,其派生類中的同名函式都自動成為虛擬函式。因此在派生類重新宣告該虛擬函式時,可以加virtual,也可以不加,但習慣上一般在每一層宣告該函式時都加virtual,使程式更加清晰。

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

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

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

這就如同前面說的,不斷地告訴計程車司機要去的目的地,然後司機把你送到你要去的地方。

請問什麼是純虛類,什麼情況下應用純虛類

純虛數是一個在基類中說明的虛數,它在該基類中沒有定義,但要求在它的派生類中必須定義自己的版本,或重新說明為純虛擬函式 純虛類是什麼 純虛類是一種特殊的虛擬函式,定義格式如下 class 類名 其中,函式名 是什麼是純虛擬函式名。他的實現用賦值偽來表示,被定義為無 純虛類 和抽象類 有什麼關係 c 裡...

凡是包含純虛擬函式的類都是抽象類,C 問題 只要有一個純虛擬函式的類叫做 抽象類 或者 基類 對嗎?

個人覺bai得是對的,包含純du 虛擬函式的類就是一個抽 象類zhi,抽象類不能 dao被例項化,而純虛函專數也不能在抽象類中屬被定義,只能由子類實現,所以無法呼叫。類可以包含純虛擬函式和其他函式,但只有要一個純虛擬函式的存在,這個類就被認為是抽象類,因此抽象類的定義與他的內容並不衝突。這個是 有 ...

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

基類中有純虛擬函式,如virtual int fun 0 在派生類中要實現 這個純虛擬函式。如果派生類中沒有實現這個函式,那麼等於派生類中也有了,virtual int fun 0 那麼派生類也變成了抽象類,不能例項化。抽象類 有純函式的類。純虛擬函式就是隻有宣告且 0的 派生類就是它的子類嘛,如果...