虽然我使用的是MFC,但我认为这主要是一个C ++问题。
我从CResizingDialog
派生CDialog
,它是应用程序中所有对话框的基类。它使他们能够根据目标屏幕大小自动(您猜对了)调整大小。 CResizingDialog通过覆盖CDialog的几个虚函数来实现这一目标,包括OnSize()
,OnInitDialog()
,OnPaint()
。到目前为止还不错。
现在我要添加一个属性表/页面,它也需要相同的大小调整功能,但我不能使用CResizingDialog作为我的属性页面的基类。这意味着我需要一个新的基类来说明从CPropertyPage
派生的CResizingPage,它将包含与CResizingDialog相同的功能。
然而,调整对话框及其控件大小的代码完全相同。有没有办法可以以某种方式重用CResizingDialog?我从来没有使用多重继承,这会有帮助吗?
答案 0 :(得分:2)
我有2条建议如何解决这个问题,你必须决定哪种情况更容易/更适合你的情况。
如果可能,您可以将调整大小代码移动到具有适当参数的独立函数中,您可以从2个虚拟函数中调用这些参数。
另一种方法是使基类成为模板。像这样:
template< typename Base >
CResizingBase
: public Base
{
// override the appropriate functions here
};
class CResizingDialog
: public CResizingBase< CDialog >
{
};
class CResizingPage
: public CResizingBase< CPropertyPage >
{
};