我在父类中有一个方法可以执行此操作:
HWND SppTab::CreateToolTip(HWND hDlg)
{
LRESULT added, active;
const int Controls[] = {
/* Audio Tab (IDD_AUDIO ) */
IDC_AUD_AUTO, IDC_AUD_8, IDC_AUD_16, IDC_CH_AUTO, IDC_LEFT, IDC_RIGHT, IDC_LEVEL_L, IDC_LEVEL_R, IDC_LEVEL_M,
/* Transmitter Tab (IDD_DECODE) */
IDC_DEC_AUTO, IDC_BTN_SCAN, IDC_LIST_PPM, IDC_LIST_PCM,
IDC_CH1, IDC_CH2, IDC_CH3, IDC_CH4, IDC_CH5, IDC_CH6, IDC_CH7, IDC_CH8, IDC_CH9, IDC_CH10, IDC_CH11, IDC_CH12, IDC_CH13, IDC_CH14, IDC_CH15, IDC_CH16
};
// Loop on all controls that require tooltip
for (auto ctrl : Controls)
{
HWND hwndTool = GetDlgItem(hDlg, ctrl);
toolInfo.uId = (UINT_PTR)hwndTool;
added = SendMessage(m_hwndToolTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
active = SendMessage(m_hwndToolTip, TTM_ACTIVATE, TRUE, (LPARAM)&toolInfo);
};
}
return m_hwndToolTip;
}
派生方法之间的唯一区别是数组Controls []的内容。 似乎数组应该是派生类的成员,并且将以不同方式初始化。请注意,数组大小不固定。
如何初始化一个类成员的数组? 我知道我可以定义全局数组(对于每个类)并在构造函数中分配它们。这是最好的方式吗?
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++
嗯,您始终可以定义全局数组const int g_RawBarId[] =
{IDC_CH1,IDC_CH2,IDC_CH3,IDC_CH4,IDC_CH5,IDC_CH6,IDC_CH7,IDC_CH8,\
IDC_CH9,IDC_CH10,IDC_CH11,IDC_CH12,IDC_CH13,IDC_CH14,IDC_CH15,IDC_CH16};
然后将它分配给构造函数中的向量:
m_vRawBarId(g_RawBarId, g_RawBarId+sizeof(g_RawBarId)/ sizeof(int))
然而,使用全局变形感觉就像破坏了OO游戏的规则。
如果你有更好的想法 - 一个例子将是非常宝贵的。
答案 0 :(得分:2)
由于您的数组似乎是仅用于控制CreateToolTip()
所做的常量数据,因此最谨慎的方法是将两个(或更多)数组定义为静态常量并使用指针CreateToolTip()
中的一个或另一个。
这样可以避免不必要的数据复制,不必要的数组初始化,不必要的内存分配以及尝试处理变量数组大小的不必要的痛苦。
答案 1 :(得分:0)
在类构造函数中初始化此成员数组可能是正确的。我想没有最好的方法。如果你做得恰到好处,所有人都会得到相同的结果。
如果您使用的是C ++ 11,则可以在类定义中初始化成员。但是如果使用动态内存,那么我建议首先在构造函数中提供最小内存,然后根据需要增加。
此外,数组大小未知,因此您可以使用动态成员数组分配。
使用C中的malloc
和calloc
以及C ++中的new
完成。
或者,您可以使用一些管理动态内存分配的数据类型,其示例在C ++中为std::vector
。