【发布时间】:2019-10-01 19:42:57
【问题描述】:
假设我有以下类层次结构,其中我有一个接口,然后对该接口进行进一步的特化,以保证更多的功能:
class parent_interface {
public:
virtual void foo() = 0;
};
class child1_interface : public parent_interface {
public:
virtual void bar() = 0;
};
class child2_interface : public parent_interface {
public:
virtual void baz() = 0;
}
然后我有提供该功能的具体类:
class parent : public parent_interface {
public:
void foo() override;
};
class child1 : public parent, public child1_interface {
public:
//using parent::foo; ??
void bar() override;
};
问题是如果我尝试实例化一个 child1 对象,我会收到一个编译器错误
不能将字段
instantiation_name声明为抽象类型,因为以下虚函数在 child1 中是纯的:void foo()
我可以通过在 child1 中创建一个名为 foo 的方法来解决这个问题,该方法只调用 parent::foo,但我想知道是否有更简洁的解决方案来解决这个问题。
【问题讨论】:
-
你有一个菱形继承模式。如果您搜索例如
c++ diamond inheritance pattern你应该得到很多关于它的问题和可能的解决方案的点击。
标签: c++ multiple-inheritance virtual-functions