如何在具有相同父级的两个类之间共享代码
How to share code between two classes having same parent?
虽然我使用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 >
{
};
相关文章:
- 我希望定义两个具有相同代码的不同名称的库
- 计算两个代码块的时间复杂度
- 这两个代码片段相似,但显示的结果不同
- 如何将两个代码组合成一个函数?
- 为什么要更改这两个代码的输出"&"字符?
- 以下两个代码段有什么区别?
- 两个代码段之间有什么区别?
- 给定的两个代码有什么区别.一个在 ideone 上运行时超出时间限制,另一个工作正常
- 为什么这两个代码片段具有相同的效果?
- 为什么这两个代码给出不同的输出?// bits.c float_i2f
- 维护/维持两个代码集的风险,一个用于 CPU,一个用于 GPU,需要执行非常相似的功能
- 这两个代码之间的差异(为什么我的数组也有额外的空间,即使我限制了它)
- 我不知道为什么只有一个代码在两个代码之间具有sigsegv(看起来相同)
- 为什么这两个代码之间的运行时间差异这么长
- 两个代码段之间执行时间的奇怪差异
- 删除停止语,然后应用大小写折叠(如何组合两个代码)
- 为什么这两个代码片段相互等效(指针)
- 如何合并两个代码几乎相同但在不同结构上操作的类
- 这两个c++代码块的区别是什么?
- 为什么这两个代码变体产生不同的浮点结果?