亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

派生類中函數的C+“虛擬”關鍵字。有必要嗎?

派生類中函數的C+“虛擬”關鍵字。有必要嗎?

C++
冉冉說 2019-07-17 10:06:03
派生類中函數的C+“虛擬”關鍵字。有必要嗎?用下面的結構定義.。struct A {     virtual void hello() = 0;};方法1:struct B : public A {     virtual void hello() { ... }};方法2:struct B : public A {     void hello() { ... }};這兩種重寫hello函數的方法有什么區別嗎?
查看完整描述

3 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

他們完全一樣。除了第一種方法需要更多的輸入,而且可能更清晰之外,它們之間沒有什么區別。


查看完整回答
反對 回復 2019-07-17
?
www說

TA貢獻1775條經驗 獲得超8個贊

函數的“虛擬性”是隱式傳播的,但是,如果virtual關鍵字沒有顯式使用,所以您可能希望使用它,如果只是為了使編譯器保持安靜。

從純粹的文體角度來看,包括virtual關鍵字清楚地向用戶‘宣傳’這個功能是虛擬的。這對任何進一步細分B級的人來說都是很重要的,而不必檢查A的定義。對于深度類層次結構而言,這一點尤為重要。


查看完整回答
反對 回復 2019-07-17
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

不,virtual派生類的虛擬函數重寫不需要關鍵字。但值得一提的是一個相關的缺陷:無法覆蓋虛擬函數。

這個未能覆蓋如果您打算覆蓋派生類中的虛擬函數,但在簽名中出錯,使其聲明一個新的和不同的虛擬函數,則發生。此函數可能是過載基類函數,或者它的名稱可能不同。是否使用virtual關鍵字在派生類函數聲明中,編譯器將無法判斷您打算重寫基類中的函數。

然而,這個陷阱卻被C+11解決了。顯式覆蓋語言特性,它允許源代碼明確指定成員函數用于覆蓋基類函數:

struct Base {
    virtual void some_func(float);};struct Derived : Base {
    virtual void some_func(int) override; // ill-formed - doesn't override a base class method};

編譯器將發出編譯時錯誤,編程錯誤將立即明顯(也許派生中的函數應該使用float作為論據)。

請參閱WP:C+11.


查看完整回答
反對 回復 2019-07-17
  • 3 回答
  • 0 關注
  • 437 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號