来自两个相同基类的c ++派生类

时间:2014-02-25 20:35:50

标签: c++ inheritance duplicates virtual

以下是我的课程:

class Base1
{
public:
    Base1();
    ~Base1();

    virtual void main_func()=0;
}

class D1 : public Base1
{
public:
    D1();
    ~D1();

    virtual void main_func(do_d1_main(););
}
class D2 : public Base1
{
public:
    D2();
    ~D2();

    virtual void main_func(){do_d2_main();};
}

class Base2
{
public:
    Base2();
    ~Base2();

    int   m_needed_by_b1;
}
class D12B2: public Base2, public D1, public D2
{
public:
    D12B2();
    ~D12B2();
}

问题在于:

do_main_func1()do_main_func2()都需要访问m_needed_by_b1中的成员Base2。怎么样?

我可以为main_func中的每个定义虚拟函数class D12B2吗?这样,他们就可以访问所有D12B2,包括Base2。我如何单独指定每个?

我考虑在Base1中添加一个(受保护的)成员,这是一个指向Base2对象的指针。这必须由D12B2设置。似乎可能有更优雅的方式来做到这一点。

TIA

1 个答案:

答案 0 :(得分:0)

  

似乎可能有更优雅的方式来做到这一点。

很可能有 - 不要使用多重继承。

但是,如果您要坚持使用多重继承,则必须注意以下事项:D1D2应在D12B2虚拟继承以避免钻石问题。假设do_d1_maindo_d2_main实际上意味着main_func,那么您可以实施一个D12B2::main_func来访问m_needed_by_b1

但回到原来的说明:

听起来Base1Base2不应该存在,D1D2应该是纯抽象类。哪个会留给你

class D1
{
public:
    virtual void d1_func() = 0;
};

class D2
{
public:
    virtual void d2_func() = 0;
};

class D12B2 : public virtual D1, public virtual D2
{
public:
    D12B2();
    ~D12B2();

    virtual void d1_func()
    {
        // do something
    }

    virtual void d2_func()
    {
        // do something else
    }

private:
    int m_myData;
};