2010-03-11 98 views
4

我在VSTS 2008中使用本地C++。關於虛擬功能的一個簡單問題。在我下面的示例中,如果我在派生類中將Foo聲明爲「virtual void Foo()」或「void Foo()」,會有什麼區別?對派生類派生的任何未來類的任何影響?虛擬功能問題

class Base 
{ 
public: 

    Base() 
    { 
    } 

    virtual void Foo() 
    { 
     cout << "In base" << endl; 
    } 
}; 

class Derived : public Base 
{ 
public: 

    Derived() 
    { 

    } 

    void Foo() 
    { 
     cout << "In derived " << endl; 
    } 
}; 

回答

9

沒有區別。但爲了可讀性,我總是保持virtual

+2

是的,沒有區別,但對於沒有編寫代碼來理解發生的事情的人來說更容易。 – anthares 2010-03-11 12:53:01

+0

很酷,問題回答! – George2 2010-03-11 12:53:57

+1

+1表示爲了清晰而始終使用虛擬,即使它不是必需的。 – 2010-03-11 14:51:09

4

不,只要它與基類中的成員函數具有相同的簽名,它就會自動變爲虛擬。但是,您應該明確地使其虛擬,以避免任何人閱讀代碼時感到困惑。

+0

感謝您的回覆。 – George2 2010-03-11 12:54:21

+0

+1實際解釋爲什麼它沒有區別。 – 2010-03-11 12:54:47