从抽象基类的多个部分实现继承? [英] Inherit from multiple partial implementations of an abstract base class?
本文介绍了从抽象基类的多个部分实现继承?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
可以有一些抽象接口的部分实现,然后收集这些部分实现到单个具体类通过使用多重继承?
Is it possible to have a number of partial implementations of an abstract interface, and then collect these partial implementations into a single concrete class by using multiple inheritence?
我有以下示例代码:
#include <iostream>
struct Base
{
virtual void F1() = 0;
virtual void F2() = 0;
};
struct D1 : Base
{
void F1() override { std::cout << __func__ << std::endl; }
};
struct D2 : Base
{
void F2() override { std::cout << __func__ << std::endl; }
};
// collection of the two partial implementations to form the concrete implementation
struct Deriv : D1, D2
{
using D1::F1; // I added these using clauses when it first didn't compile - they don't help
using D2::F2;
};
int main()
{
Deriv d;
return 0;
}
无法编译时出现以下错误:
This fails to compile with the following errors:
main.cpp: In function ‘int main()’:
main.cpp:27:11: error: cannot declare variable ‘d’ to be of abstract type ‘Deriv’
main.cpp:19:8: note: because the following virtual functions are pure within ‘Deriv’:
main.cpp:5:18: note: virtual void Base::F1()
main.cpp:6:18: note: virtual void Base::F2()
推荐答案
尝试从 Base
:
struct D1 : virtual Base
{
void F1() override { std::cout << __func__ << std::endl; }
};
struct D2 : virtual Base
{
void F2() override { std::cout << __func__ << std::endl; }
};
没有虚拟继承,你的多继承场景看起来像是继承自两个单独的和不完整的基类 D1
和 D2
,两者都不能实例化。
Without the virtual inheritance, your multiple inheritance scenario looks like inheritance from two separate and incomplete base classes D1
and D2
, neither of which can be instantiated.
这篇关于从抽象基类的多个部分实现继承?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文