0

除了可以从派生类重写的方法中调用之外,纯虚函数似乎不能在任何地方调用!那么,它的身体有什么用呢?例如。

class base
{
    public:
    virtual void fun()=0
    {
        cout<<"I have been called from derived class"<<endl;
    }
};
class derived:public base
{
    public:
    void fun()
    {
        cout<<"I am the derived class"<<endl;
        base::fun();

    }
};
void main()
{
    derived d;
    d.fun();
}
4

4 回答 4

5

它的使用方式与您在问题中提到的完全相同,派生类可以重用一些通用逻辑,但同时您希望强制派生类为非通用部分提供实现。

于 2012-05-28T17:53:11.187 回答
2

它强制派生类实现它,同时仍为派生实现提供您不希望从派生类以外的任何地方调用的常见行为。

于 2012-05-28T17:52:00.800 回答
1

virtual方法旨在充当abstract类似于其他语言(例如 Java 和 C#)的完全方法。class仅填充纯方法的 C++virtual代表interface来自其他语言的 a。

给他们一个身体是对这种理想的滥用,它违背了目的。如果基础class想只为它的孩子提供功能,那么它应该通过一个protected非纯的virtual方法来做到这一点(virtual如果有意义的话仍然可以)。

于 2012-05-28T17:53:06.930 回答
0

这个问题可能是C++ 纯虚函数的副本, 我已经看到这主要与纯虚析构函数(需要实现)一起使用。可以在这里找到另一个解释纯虚拟析构函数使用之外的案例的好答案:(Im)pure Virtual Functions

于 2012-05-28T18:03:18.253 回答