尽管我使用的是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/