2014-08-27 71 views
1

我只注意到我可以在抽象類本身中實現一個純虛函數。海灣合作委員會不抱怨。有沒有使用這種實現?任何人都可以使用它嗎?在抽象類中實現純虛函數 - 有沒有使用它?

class AbstractClass 
{ 
    virtual void PureVirtualFunction() = 0; 
}; 

void AbstractClass::PureVirtualFunction() //Is there any use of this implementation? 
{ 
    cout << "I am inside pure virtual function of AbstractClass" << endl; 
} 

class DerivedClass : public AbstractClass 
{ 
    public: 
     void PureVirtualFunction(); 
}; 

void DerivedClass::PureVirtualFunction() 
{ 
    cout << "I am inside pure virtual function of DerivedClass" << endl; 
} 

回答

1

您可以從DerivedClass實現中調用它,例如(如果AbstractClass::PureVirtualFunction不是私人):

void DerivedClass::PureVirtualFunction() 
{ 
    AbstractClass::PureVirtualFunction(); 
    cout << "I am inside pure virtual function of DerivedClass" << endl; 
} 

或者,即使它是私有的,你可以把它從AbstractClass本身:

class AbstractClass 
{ 
    virtual void PureVirtualFunction() = 0; 

public: 
    void CallPureVirtualFunction() { 
     AbstractClass::PureVirtualFunction(); 
    } 
}; 

DerivedClass().CallPureVirtualFunction(); 

I am inside pure virtual function of AbstractClass 
4

您可以使用它來提供派生類可以訪問的默認實現。

一個可能的用途是「親愛的派生類的作者,這個虛函數非常重要,我要確保你知道你用它做什麼,我會提供一個默認的實現,但你必須明確使用它。「這樣做是這樣的:

class AbstractClass 
{ 
public: 
    virtual void PureVirtualFunction() = 0; 
}; 

void AbstractClass::PureVirtualFunction() //Is there any use of this implementation? 
{ 
    cout << "I am inside pure virtual function of AbstractClass" << endl; 
} 

class DerivedClass : public AbstractClass 
{ 
    public: 
     void PureVirtualFunction(); 
}; 

void DerivedClass::PureVirtualFunction() 
{ 
    AbstractClass::PureVirtualFunction(); 
} 
+0

這是行不通的,因爲PureVirtualFunction是私有的。 – ontherocks 2014-08-27 14:50:49

+0

@ontherocks謝謝,修正。 – Angew 2014-08-27 15:05:04