【发布时间】:2014-02-25 20:35:49
【问题描述】:
这是我的课程:
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() 都需要访问 Base2 中的成员 m_needed_by_b1。怎么样?
我可以为class D12B2 中的每个定义虚函数main_func 吗?这将使他们能够访问所有D12B2,包括Base2。我将如何分别指定每个?
我考虑在Base1 中添加一个(受保护的)成员,即指向Base2 对象的指针。这必须由D12B2 设置。似乎有一种更优雅的方法可以做到这一点。
TIA
肯
【问题讨论】:
-
一种方法(有些人不喜欢)是使用多重继承;使
D1和D2都派生自 bothBase1和Base2。 -
在
do_d1_main、do_d2_main、do_main_func1和do_main_func2之间,您在代码或描述中指定了四件事,其中没有任何定义。do_d1_main和do_main_func1(以及它们对应的d2)应该是相同的功能吗? -
这通常被认为是design/code smell
-
@WhozCraig:
main_func被一个只知道这是 Base1 类的对象调用。我使用do_main_funcX()表示每个 DX::main_func 做不同的事情。 @Brian Bi:这会给我两个单独的 Base2 对象,我试图避免。
标签: c++ inheritance duplicates virtual