由于工程的原因,需要编写一个多重继承的类,
例如:CONe继承CTwo和CStatic两个类,定义CONe有两种写法
第一种:
class CONe:public CTwo,public CStatic
{
afx_msg void OnPaint();
}
第二种:
class CONe:public CStatic,public CTwo
{
afx_msg void OnPaint();
}
两种写法在日常没有太大的区别,但是你想重载CStatic中OnPaint函数就会不同。
第一种写法直接添加消息函数OnPaint,可以看到在CPP中出现
BEGIN_MESSAGE_MAP(CONe, CTwo)
ON_WM_PAINT()
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CONe, CStatic)
ON_WM_PAINT()
END_MESSAGE_MAP()
编译程序也不会提示错误,但是你把类挂载系统中,就会发现第一种情况OnPaint函数中出现崩溃,this指针属于无效指针。第二种情况则不会出现任何情况。
把第一种的 BEGIN_MESSAGE_MAP修改为下面
BEGIN_MESSAGE_MAP(CONe,CStatic)
ON_WM_PAINT()
END_MESSAGE_MAP()
挂载系统中依旧会出现崩溃。
问题没有找到具体的原因,个人猜测是由于多重继承的时候,基类的顺序不同,会影响子类构造函数不同。