2008-09-22 41 views

回答

5

它可以工作,因爲派生類可以覆蓋基類的私有虛函數,即使基類函數覆蓋了它的基類函數。

這是完全合法的:


class Parent 
{ 
public: 
    int foo() {return bar();} // the non-virtual public interface 
private 
    virtual int bar(); 
}; 

class Child : public Parent 
{ 
private: 
    virtual int bar(); // overrides Parent::bar() 
}; 

class Grandchild : public Child 
{ 
private: 
    virtual int bar(); // overrides Child::bar(); 
}; 
1

一個基類派生類可自行決定它的工作原理:

你可以通過實現虛函數完全覆蓋該方法。 您可以通過在派生類方法中的某處調用「中間」類函數來擴充該方法。

如果這不是你想要的,你需要在'中間'類中明確地設置它。我不會。如果你發現自己渴望這一點,這可能意味着你沒有給基類足夠的定製點。