多重继承:访问通用接口

时间:2017-02-27 19:33:02

标签: c++ multiple-inheritance

鉴于以下内容:

class A {
//
}

class B {
//
}

class Ad1 : public A {
//
}

class Ad2 : public A {
//
}

class Ad1B : public Ad1, public B {
//
}

class Ad2B : public Ad2, public B {
//
}

类型Ad1B和Ad2B共享一个公共继承接口(A和B的组合接口)。 是否可以创建指向Ad1B或Ad2B类型的对象的指针,并通过它可以访问此共享接口?有没有办法达到同样的效果?

2 个答案:

答案 0 :(得分:1)

Ad1BAd2B的公共接口是AB - 因此您可以存储指向类Ad1B或{{1}的对象的指针} {分析} Ad2BA*p分别访问B*pA功能

答案 1 :(得分:0)

您想要一个指向不存在的基类的指针。您需要一些指向具有AB组合接口的类型的指针。您必须创建具有该接口的新类型。

您可以选择三种方法:模板方法或接口方法或适配器方法。

模板

模板方法非常简单。您需要该组合界面的函数只接收对T的引用并使用您的对象。如果T具有该组合接口,则将进行编译。它甚至可以与公共数据成员合作。

接口

接口方法需要对类进行更改。您可以像这样创建该界面:

struct AB {
    // Add virtual member function
    // That is the combined version of A and B
};

现在Ad1BAd2B必须从AB界面继承。

适配器

适配器是模板和界面的混合体。您必须具有与上面相同的界面AB,但不是让Ad1BAd2B实现它,而是创建模板化适配器:

template<typename T>
struct Adapter : AB {
    T& object;

    // Override foo from AB
    void foo() override {
        object.foo();
    }
};

然后,您可以在代码中使用AB界面。你在哪里使用组合界面。