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

How to share code between two classes having same parent?

本文关键字:两个 代码 共享 之间      更新时间:2023-10-16

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

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

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

但是,调整对话框及其控件大小的代码完全相同。有没有一种方法可以以某种方式重用CResizingDialog?我从未使用过多重继承,这对这里有帮助吗?

我有两个建议来解决这个问题,你必须决定哪一个更容易/更适合你的情况。

如果可能的话,您可以将调整大小的代码移动到一个具有适当参数的独立函数中,您可以从2个虚拟函数中调用这些参数。

另一种方法是使基类成为模板。类似这样的东西:

template< typename Base >
CResizingBase
    : public Base
{
    // override the appropriate functions here
};
class CResizingDialog
    : public CResizingBase< CDialog >
{
};
class CResizingPage
    : public CResizingBase< CPropertyPage >
{
};