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

2021-03-03 20:53:29 字數 1288 閱讀 5010

1樓:淒清的小白鼠

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

a.純虛函式是一種特殊的虛函式,它沒

2樓:

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

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

3樓:千鋒教育

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

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

class base

{public:

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

return 0;

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

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

4樓:育知同創教育

c++中 析構

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

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

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

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

5樓:回頭的世界

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

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

6樓:徐霄沛

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

關於c中虛函式過載的問題,C 中純虛函式能過載嗎?

在派生類重新定義或者覆寫基類的過載函式,會導致繼承的名稱被遮掩。在派生類的 public 區域增加 using base func 語句可以解決。你在derive類中的func也加上了virtual導致基類函式被覆蓋,所以肯定錯了 大家都說錯了,沒說到重點。這不是什麼虛函式限制,主要原因在於函式呼叫...

請教關於C 中虛基類的問題,請教關於C 中虛基類的乙個問題

這是個菱形繼承,菱形繼承即是子類有兩個父類,這兩個父類都繼承自同乙個類。這時候,如果不使用虛基類,定義子類的時候,會生成兩個 祖父 基類的樣本,在呼叫 祖父 基類的成員函式的時候,就會出現 歧義 錯誤,無法編譯通過。解決的辦法就是使用虛基類,這樣就只保留乙個 祖父 基類的樣本,呼叫也不會出現 歧義 ...

c 虛繼承有什麼缺點,C 中虛繼承和一般的繼承有什麼不同

不能抄說是缺點,只能說是特點。b c虛繼承a的話,那麼任何繼承b c的類都得指定如何構造其中包含的a。如果不是繼承,那麼類b c分別各自指明如何構造其中包含的a,繼承b c的類無需再指明也不能指明如何構造其中包含的a。虛繼承的話,虛基類必須由每個最後派生的類初始化 普通繼承的話,基類由這個基類直接派...