以下是我的课程:
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
肯
答案 0 :(得分:0)
似乎可能有更优雅的方式来做到这一点。
很可能有 - 不要使用多重继承。
但是,如果您要坚持使用多重继承,则必须注意以下事项:D1
和D2
应在D12B2
虚拟继承以避免钻石问题。假设do_d1_main
和do_d2_main
实际上意味着main_func
,那么您可以实施一个D12B2::main_func
来访问m_needed_by_b1
。
但回到原来的说明:
听起来Base1
和Base2
不应该存在,D1
和D2
应该是纯抽象类。哪个会留给你
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;
};