尽管我使用的是MFC,但我相信这主要是一个C++问题。

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

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

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

最佳答案

我有2条关于如何解决此问题的建议,您必须确定哪种方式更容易/更适合您的情况。

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

另一种方法是使基类成为模板。像这样:

template< typename Base >
CResizingBase
    : public Base
{
    // override the appropriate functions here
};

class CResizingDialog
    : public CResizingBase< CDialog >
{
};

class CResizingPage
    : public CResizingBase< CPropertyPage >
{
};

关于c++ - 如何在具有相同父级的两个类之间共享代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18498257/

10-12 02:21