定义多个派生的接口成员

时间:2012-08-12 10:40:17

标签: c++ interface virtual-inheritance abstract-base-class

我希望你能解决以下问题。 我正在尝试创建一个灵活的接口系统并遇到问题。 这是相关的代码:

// Interface 1
//      this: virtual f_a
// -> abstract
struct I_A abstract
{
    virtual void f_a() = 0;
};

// Interface 2
//      I_A : virtual f_a
//      this: virtual f_b
// -> abstract
struct I_B abstract : public I_A
{
    virtual void f_b() = 0;
};

// Implementation 1
//      I_A : virtual f_a
//      zhis: defines f_a
// -> not abstract
struct S_A : public I_A
{
    virtual void f_a() {}
};

// Implementation 2
//      I_B : virtual f_a
//      I_B : virtual f_b
//      S_A : defines f_a
//      this: defines f_b
// -> not abstract
struct S_B : public I_B, public S_A
{
    virtual void f_b() {}
};

我无法实例化S_B,因为编译器声明它是抽象的。 有什么问题?

1 个答案:

答案 0 :(得分:0)

您需要在此处使用虚拟继承:

struct I_A
{
    virtual void f_a() = 0;
};

struct I_B : virtual public I_A
{
    virtual void f_b() = 0;
};


struct S_A : virtual public I_A
{
    virtual void f_a() {}
};

注1:我忽略了类声明中的abstract语句,因为它不是标准的C ++。

注2:此here有重复内容,您可以在其中找到解释原因的原因。