【问题标题】:What's the use of the body of a pure virtual function in c++?c++中纯虚函数的主体有什么用?
【发布时间】:2012-06-03 01:18:44
【问题描述】:

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

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();
}

【问题讨论】:

  • 你不能这样做,这是一个语法错误。
  • 什么,特别是语法错误?
  • Radek 暗示语言语法允许 either = 0 或函数体,但不能同时允许两者。您可以单独定义函数。

标签: c++


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-07-25
          • 1970-01-01
          • 2010-11-07
          • 2011-06-04
          • 2013-12-08
          • 2011-06-16
          • 2011-05-21
          • 2011-04-27
          相关资源
          最近更新 更多