2014-08-27 70 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