2011-03-15 23 views
19

爲什麼我在談論子類化/繼承時有時會看到C++示例,基類有virtual關鍵字,有時重寫函數也有virtual關鍵字,爲什麼有時需要將虛擬關鍵字添加到子類中? 例如:在C++中的子類爲什麼有時需要添加虛擬關鍵字來覆蓋函數?

class Base 
{ 
    Base(){}; 
    virtual void f() 
    ...... 
    } 
}; 

class Sub : public Base 
{ 
    Sub(){}; 
    virtual void f() 
    ...new impl of f() ... 
    } 
}; 
+5

我不明白 - 爲什麼這個問題倒投票?這是一個公平的問題... – Nim 2011-03-15 09:00:20

+2

有點重複http://stackoverflow.com/questions/4024476/should-methods-that-implement-pure-virtual-methods-of-an-interface-class-be-decla/ if我理解正確。 – 2011-03-15 09:02:39

+0

派生類中函數的[C++「virtual」關鍵字可能重複。是否有必要?](https://stackoverflow.com/questions/4895294/c-virtual-keyword-for-functions-in-derived-classes-is-it-necessary) – Satrapes 2017-05-25 12:37:44

回答

28

這是沒有必要的,但它可以幫助可讀性,如果你只看到派生類中定義。

§10.3[class.virtual]/3

如果虛擬成員函數VF在類Base和在派生的類聲明,直接或間接地從基地成員函數VF與派生聲明瞭與Base :: vf相同的名稱和參數列表,則Derived :: vf也是虛擬的(不論它是否如此聲明),並且它覆蓋了Base :: vf。

凡腳註97)基本上指出,如果參數列表不同,該功能不會覆蓋也不是一定virtual

相關問題