C 父類中宣告瞭虛擬函式以後是不是在子類以及子類的子類中都要宣告並重寫這個函式

2021-03-27 11:53:27 字數 2963 閱讀 6235

1樓:匿名使用者

我看了一些文獻 是不行的,虛擬函式是c++多型的體現,必須要定義

2樓:匿名使用者

在子類中可以不宣告,但是就無法使用了

3樓:匿名使用者

基類宣告虛擬函式只是提供一個介面,也就是實現多型的關鍵,子類基本都要繼承的,如果有一個子類不需要實現這個函式,說明你的繼承關係有問題,最好改變一下繼承體系

4樓:

虛擬函式宣告只能砸出現在類定義中的函式原型宣告中, 而不能在成員函式實現的時候

由成員函式來呼叫或者是通過指標、引用來訪問虛擬函式。

5樓:匿名使用者

是的,只有在子類中宣告,才能夠在呼叫的時候檢索到子類中重寫函式的資料。

c++中父類中有純虛擬函式,在子類中需要實現,問題:在子類的子類中也需要實現嗎?

6樓:小羊羊

c++中父類中有純虛擬函式,在子類中需要實現,那麼在子類的子類就不用實現了。

如果是子類沒實現的話,子子類就可能需要實現。希望能幫到你

c++ 怎樣禁止子類重寫父類的某個虛擬函式?

7樓:匿名使用者

c++11 提供指示字final,用來避免型別被繼承,或是基底型別的函式被改寫

class b:public a

;gcc4.7沒問題,

vs2010好像版不行,不識別權finalvs2012沒有試,需要win7/8

8樓:匿名使用者

不可能的事。

只要在a類中定義sayhello的時候加了virtual,那麼sayhello就永遠是個virtual函式,不管繼承多少層、回加不加virtual。

而子類答怎麼改寫父類的函式,父類完全乾涉不了。所以無法阻止c改寫b的sayhello。

除非你把b類做成一個不允許其他類繼承的類。

c++中父類中有純虛擬函式,在子類中需要實現,問題:在子類的子類中也需要實現嗎?

9樓:匿名使用者

子類中實現了,子子類就不用實現。。。

子類沒實現的話,子子類就可能需要實現。。。

反正沒有實現這個=0的函式的類是無法建立物件的。。。

所以要例項化的類就要實現,***。。。

基類中定義的虛擬函式,子類中必須要覆蓋嗎?為什麼?

10樓:匿名使用者

要看虛擬函式本身有沒有實現。

存沒有實現的純虛擬函式,那這個基類是不能例項化的。繼承這個基類的子類可以覆蓋也可以不覆蓋其虛擬函式。如果基類中的純虛擬函式在子類中沒有覆蓋,那這個子類還是一個虛類,不能例項化的。

11樓:匿名使用者

如果基類定義的純虛擬函式,那麼子類繼承下來的也是純虛擬函式,如果不給予實現,那麼便不能建立子類的例項,如果基類定義的是非純虛擬函式,那麼子類繼承下來的也是非純虛擬函式。都可以不予實現,因為自動繼承下來了,看你子類的需要。

12樓:匿名使用者

虛擬函式的目的就是在需要的時候實現,從而實現多型,如果必須覆蓋,還要虛擬函式有什麼意義

c++ 中,類的繼承:父類當使用虛擬函式時候,子類對該函式進行重寫的話,屬於子類成員函式對虛擬函式的覆蓋!

13樓:匿名使用者

可以這麼理解。

換句話說,你呼叫子類的虛擬函式,程式會執行你重寫的**,而不是定義在父類裡的**。

14樓:wssz**x的春天

有沒有**,你這樣我也看不懂!

c++父類中有純虛擬函式,在子類的子類中也需要實現嗎?

15樓:匿名使用者

(1)在main函式中,假設有父類或者子類的例項物件,就須要有父類的虛擬函式的實內現。

(2)在容main函式中,假設沒有父類或者子類的例項物件,能夠不實現父類的虛擬函式。

(3)假設把虛擬函式寫成純虛擬函式,也就不須要實現了。也沒不會發生上述討論。

子類中實現了,子子類就不用實現。

子類沒實現的話,子子類就可能需要實現。

反正沒有實現這個=0的函式的類是無法建立物件的。

所以要例項化的類就要實現。

16樓:匿名使用者

子類中實現了,子子類就不用實現。。。

子類沒實現的話,子子類就可能需要實現。。。

反正沒有實現這個=0的函式的類是無法建立物件的。。。

所以要例項化的類就要實現,***。。。

c++使用虛擬函式的時候,子類也要使用virtual關鍵字嗎

17樓:pretty星空

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

18樓:匿名使用者

不用的,隨你加不加,有virtual是可以被子類重寫的。

19樓:匿名使用者

不需要,那樣有點畫蛇添足。

20樓:白巫師

可以不用,c++並不強制在子類加virtual

21樓:暴君坎普

不用 當然為了方便** 還是寫上比較好

c++中父類中含有一個虛擬函式,那麼子類中對其進行覆蓋的話,是不是需要返回值型別也一定相同?

22樓:匿名使用者

要覆蓋一個虛擬函式,那麼引數和返回值型別必須相同,否則不會覆蓋,只能過載!

23樓:匿名使用者

必須相同,否則在編譯時會報錯,指定了衝突的返回型別

虛擬函式在子類中可以不實現嗎,C中父類中有純虛擬函式,在子類中需要實現,問題在子類的子類中也需要實現嗎

如果不是純虛擬函式,也就是基類不是抽象類的話,虛擬函式在子類中可以不實現 c 中父類中有純虛擬函式,在子類中需要實現,問題 在子類的子類中也需要實現嗎?子類中實現了,子子類就不用實現。子類沒實現的話,子子類就可能需要實現。反正沒有實現這個 0的函式的類是無法建立物件的。所以要例項化的類就要實現,c ...

C 中父類中含有虛擬函式,那麼子類中對其進行覆蓋的話,是不是需要返回值型別也一定相同

要覆蓋一個虛擬函式,那麼引數和返回值型別必須相同,否則不會覆蓋,只能過載!必須相同,否則在編譯時會報錯,指定了衝突的返回型別 c 中,類的繼承 父類當使用虛擬函式時候,子類對該函式進行重寫的話,屬於子類成員函式對虛擬函式的覆蓋!可以這麼理解。換句話說,你呼叫子類的虛擬函式,程式會執行你重寫的 而不是...

虛擬函式和虛基類的區別是什麼啊,c 中虛擬函式與純虛擬函式的區別是什麼?

虛擬函式 虛基類,它們都和virtual有關,這兩個帶有虛字的定義容易使人混淆,回下面先從作用答 上來解釋這兩個定義的區別 1.虛擬函式是用於多型中virtual修飾父類函式,確保父類指標呼叫子類物件時,執行子類函式的。2 虛基類是用來在多繼承中,如果父類繼承自同一個父類,就只例項化一個父類 說的有...