使用C ++中的父类实现覆盖纯虚方法

问题描述 投票:0回答:1

我使用多重继承来提供两个共享类似方法的不同接口。 MWE代码如下:

struct A {
    virtual void foo() = 0;
};

struct B {
    virtual void foo() = 0;
};

struct C : public A {
    virtual void foo() override { }
};

struct D : public B, public C {
};

int main(void) {
    D x;
    return 0;
}

但是在使用g++进行编译时会产生以下错误:

main.cpp: In function ‘int main()’:
main.cpp:17:4: error: cannot declare variable ‘x’ to be of abstract type ‘D’
  D x;
    ^
main.cpp:13:8: note:   because the following virtual functions are pure within ‘D’:
 struct D : public B, public C {
        ^
main.cpp:6:15: note:     virtual void B::foo()
  virtual void foo() = 0;
               ^~~

我试图避免钻石图案(我只是想提供两个共同的方法的接口),我宁愿不必在foo()重新实现struct D,即使它只是调用C::foo()

那有什么办法吗?

c++ multiple-inheritance virtual-method
1个回答
0
投票

你将不得不在某个时候实际实现B :: foo,即使它只是转发到其他函数,也没有办法解决这个问题。 B :: foo与A :: foo没有任何关系,它们与编译器完全不同。

如果B :: foo()确实应该是A :: foo(),那么B似乎应该从A派生,而B根本不应该有foo。

© www.soinside.com 2019 - 2024. All rights reserved.