c – 如何在实现文件中实现虚拟方法?

前端之家收集整理的这篇文章主要介绍了c – 如何在实现文件中实现虚拟方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
C号问题:

让我说我想使用一个抽象类和多个方法作为接口:

// this is AbstractBase.hpp

class AbstractBase
{
public:
  virtual int foo() = 0;
  virtual int bar() = 0;
  // imagine several more pure virtual methods are here
};

我想要一个实现所有虚拟方法的子类,我不想在头文件中实现它们,而是在它们的实现文件中.

我真的要在这样的子类声明中再次声明所有这些方法吗?我认为应该有一种方法来避免这一步(来自ObjC,Java)

// this is Concrete.hpp

class Concrete : public AbstractBase
{
public:
  int foo();
  int bar();
  // need to copy paste all the method declarations here again...? why?
};

我想做的是在实现文件中实现这些方法

// this is Concrete.cpp

#include "Concrete.hpp"

int Concrete::foo()
{
    return 666;
}

// etc...

但是无法弄清楚如何,而不必在每个子类中重新声明该接口.

解决方法

尽管如果您将定义与声明“Java风格”组合在一起,您可以避免第二次编写函数头签名,即
class Concrete : public AbstractBase
{
public:
  int foo() override {return 666;}
};

当您要单独提供定义时,C不允许您避免声明步骤.

原因是声明是主要的,而定义是次要的.为了能写

int Concrete::foo()
{
    return 666;
}

在您的CPP文件中,您需要告诉编译器,具体意图在其标题中覆盖foo.

猜你在找的C&C++相关文章