如何在具有相同父级的两个类之间共享代码?

时间:2013-08-28 21:11:34

标签: c++ oop mfc polymorphism

虽然我使用的是MFC,但我认为这主要是一个C ++问题。

我从CResizingDialog派生CDialog,它是应用程序中所有对话框的基类。它使他们能够根据目标屏幕大小自动(您猜对了)调整大小。 CResizingDialog通过覆盖CDialog的几个虚函数来实现这一目标,包括OnSize()OnInitDialog()OnPaint()。到目前为止还不错。

现在我要添加一个属性表/页面,它也需要相同的大小调整功能,但我不能使用CResizingDialog作为我的属性页面的基类。这意味着我需要一个新的基类来说明从CPropertyPage派生的CResizingPage,它将包含与CResizingDialog相同的功能。

然而,调整对话框及其控件大小的代码完全相同。有没有办法可以以某种方式重用CResizingDialog?我从来没有使用多重继承,这会有帮助吗?

1 个答案:

答案 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 >
{
};