2013-02-11 111 views
2

下面的代碼將從類B調用函數F,但有人可以向我解釋爲什麼是這樣。 B類的方法是否有可能重載V類的方法(因爲B是從V繼承的)?提前致謝。C++中的類繼承

#include <iostream> 
using namespace std; 

class V{ 
public: 
    void f(){ x+=2; cout << "V:"<< x;}; 
    int x; 
}; 
class B: public virtual V{ 
public: 
    void f(){ x+=3; cout << "B:"<< x;}; 
    int x; 
}; 
class D: public B, virtual public V{ 
public: 
    void g(){ x++; f(); } 
}; 
void main(){ 
    D ins; 
    ins.x = 1; 
    ins.g(); 
} 

回答

1

沒有,沒有超載方面所做的工作。正如我們上面所回答的那樣,B的f()簡單地隱藏了V的f(),因爲D同時從B和V繼承,B是兩者中派生最多的,所以它將從B得到f()指出從V繼承D是不必要的,因爲V已經從B包含。