考虑以下架构:
因此,
问题是:哪些继承关系应标记为`virtual`以实例化`BB`和`BBB`?
理想情况下,继承图应如下所示:
这个设计的理念是,A、AA和AAA是描述增量功能级别的接口。B、BB和BB是相应的增量实现。(例如,BB定义了AA所需的所有内容,并具有B中的功能)
class A //abstract interface
{
public:
virtual void f() = 0;
};
class AA : public A //abstract interface
{
public:
virtual void g() = 0;
};
class AAA : public AA //abstract interface
{
public:
virtual void h() = 0;
};
class B : public A // implementation class
{
public:
void f() override {};
};
class BB : public B, public AA {}; // implementation class
{
public:
void g() override {};
};
class BBB : public BB, public AAA {}; // implementation class
{
public:
void h() override {};
};
因此,
BB
和BBB
都是虚类,因为BB没有覆盖f函数,而BBB没有覆盖f和g函数。我的愿望是能够实例化BB和BBB(这样BB和BBB将使用由B定义的f函数的重写,而BBB将使用由BB定义的g函数的重写)。问题是:哪些继承关系应标记为`virtual`以实例化`BB`和`BBB`?
理想情况下,继承图应如下所示:
A
|\
| \
| \
AA B
| \ |
| \ |
AAA BB
\ |
\ |
BBB
这个设计的理念是,A、AA和AAA是描述增量功能级别的接口。B、BB和BB是相应的增量实现。(例如,BB定义了AA所需的所有内容,并具有B中的功能)