在其接口之外使用公共虚拟派生类

时间:2016-07-26 23:41:45

标签: c++ c++14

我的情况是我有两个类,一个接口和一个使用这两个类的实现。

class A : public virtual Interface<T>

class B : public virtual Interface<T>

class B在内部使用class A,这是不允许的,因为class A是公共虚拟接口的派生类。我收到以下错误:error: cannot declare variable ‘a’ to be of abstract type ‘A’有没有办法在不为A创建新类的情况下执行以下操作?

class Interface 
{
    virtual void foo() = 0;
    virtual void bar() = 0;
};

class A : public virtual Interface
{
public:
    void foo(){ }
};

class B : public virtual Interface
{
public:
    void bar()
    {
        A a;
    }
};

class Implementation: public A, public B
{
public:
    Implementation()
    {
    }
};

int main(){
    Implementation impl;

    return 0;
}

1 个答案:

答案 0 :(得分:4)

不,你不能实例化A,因为它没有实现Interface中的所有纯虚函数。

以下适用于我。

class Interface
{
  virtual void foo() = 0;
  virtual void bar() = 0;

public:
  virtual ~Interface() {}
};

class A : public virtual Interface
{
public:
  void foo() override {}
  void bar() override {}
};

class B : public virtual Interface
{
public:
  void foo() override {}

  void bar() override
  {
    A a;
  }
};

class Implementation : public A, public B
{
public:
  void foo() override { A::foo(); }
  void bar() override { B::bar(); }
};

int main()
{
  Implementation impl;

  return 0;
}