??????將虛擬函數聲明為非公用的,將共用函數聲明為非虛擬的.如果基類是需要被繼承的,則其虛擬函數一定要是虛擬的.
??????這個觀點和Template Method模式可以說是殊途同歸.
??????如果一個基類的虛擬函數被聲明為private,則可以認為派生類可以覆蓋該虛擬函數,也可以不覆蓋。但是不可以調用該函數的實現.
class?Base


{
public:

????void?f()
{?do_f();?}
private:
????virtual?void?do_f();
};
??????如果一個基類的虛擬函數被聲明為protected,則可以認為派生類需要覆蓋該虛擬函數,而且得調用基類的虛擬函數的實現
class?Base


{
public:

????void?f()
{?do_f();?}
protected:
????virtual?void?do_f();
};

class?Derive?:?public?Base


{
protected:
????virtual?void?do_f()

????
{
????????//?do?something
????????Base::do_f();
????????//?do?something
????}
};
??????這個觀點和Template Method模式可以說是殊途同歸.
??????如果一個基類的虛擬函數被聲明為private,則可以認為派生類可以覆蓋該虛擬函數,也可以不覆蓋。但是不可以調用該函數的實現.











??????如果一個基類的虛擬函數被聲明為protected,則可以認為派生類需要覆蓋該虛擬函數,而且得調用基類的虛擬函數的實現

























