gpt4 book ai didi

c++ - 在 C++/MFC 中混合和匹配类

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:20:22 24 4
gpt4 key购买 nike

我正在尝试重构一个代码库,我希望将不相关的类之间的一些共同功能结合起来。我想在公共(public)基类中添加该功能,但我不确定它是否是干净的好方法。

假设我有 CMyWnd 类和 CMyDialogEx 类,两者不同,因此它们不能从一个基类继承。我想向这两个类添加一个按钮,并将消息处理程序也添加到这两个类。

所以我想做这样的事情:

CMyWnd : public CWnd, public COnOkBtnFunctionality, public COnCancelBtnFunctionality
CMyDialogEx: public CWnd, public COnOkBtnFunctionality

COnOkBtnFunctionality 将定义 CButton m_buttonOk,以及它应该具有的所有 afx_msg 函数。等等。

这种方法可行/好吗?或者我应该采用更好的模式吗?

最佳答案

COnOkBtnFunctionality 的设计让您遇到问题,它希望您使用继承来实现代码重用。

快速提醒:继承不是为代码重用而设计的,它是为引入抽象而设计的。

或者换句话说:您的 CMyWnd 是一种特定类型的COnOkBtnFunctionality,还是具有COnOkBtnFunctionality

让我将您重定向到 Jeff Attwood 以了解更多关于该主题的信息:http://www.codinghorror.com/blog/2004/08/inherits-nothing.html


基本上您想要使用多个父类(super class)来实现 Mixin功能。这样的实现有一些优点,但也有缺点。

考虑如何实现 COnOkBtnFunctionality 和系列,以便将它们用作组件,而不是 Window 类的父类(super class)。这当然是可能的,您可能会喜欢这个结果.

或者,我可以建议您考虑的一件事是 Decorator pattern ,这可能正是您所需要的。它的优点是可以在运行时轻松地选择和应用“扩展”。

关于c++ - 在 C++/MFC 中混合和匹配类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4586594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com