【问题标题】:Pure virtual function definition outside derived class派生类外的纯虚函数定义
【发布时间】:2012-10-18 15:55:18
【问题描述】:

我在头文件中有抽象基类和派生类。是否可以在派生类之外定义纯虚函数?

例如:

//file .h
class Baseclass
{
public:
    virtual int vfunc() = o;
   //assume Ctor and Dctor
};
class Derivedclass : public Baseclass
{
public:
    int vfunc();
    //assume Ctor and Dctor
};

现在在 cpp 文件中:

#include <file.h>
int Derivedclass :: vfunc()
{
    // Body of the function
}

上述方法是否正确/可能?

【问题讨论】:

  • 你应该使用#include "file.h"
  • 你为什么认为它不正确?编译器有没有给出任何错误或警告??
  • @elyashiv:不!请不要给出这样的笼统陈述。 &lt;&gt;"" 之间有真正的区别,如果您想解释,请做,但不要在没有任何理由的情况下敲定自己的规则。
  • = 0; 而不是= o;
  • 对不起,我这边的错字:1) virtual int vfunc() = 0; 2)#include“file.h”。但我的主要意图是了解纯虚函数的定义方法。我从下面的答案中得到了澄清。谢谢大家。

标签: c++


【解决方案1】:

这不仅是可能的,而且是标准做法。唯一需要担心将函数定义放入标头的是模板。

【讨论】:

    【解决方案2】:

    是的,这是可能的。你可以在课堂之外定义它们,如果你想问的话。

    【讨论】:

      【解决方案3】:

      是否可以在派生类之外定义纯虚函数?

      该函数在派生类中不是纯虚函数,它只是在基类中是纯虚函数。

      派生类覆盖函数并且没有纯说明符(函数声明符后面的=0 位)所以DerivedClass::vfunc() 不是纯虚的,因此必须有一个定义如果它在程序中使用,则在某处。将其定义在与标头不同的文件中是完全正常的。

      【讨论】:

      • 请注意,书面问题使用=o 而不是=0 -- 并且=o 将导致编译器错误,也许是一个相当混乱的错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2018-10-14
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多