首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC中指针强制转换有关问题,

2013-11-05 
MFC中指针强制转换问题,求助!!![解决办法]但是将父类指针强制转换成子类指针,父类中没有子类的一些新函数

MFC中指针强制转换问题,求助!!!

[解决办法]
但是将父类指针强制转换成子类指针,父类中没有子类的一些新函数啊,怎么能访问呢,该如何解释啊?

可以用dynamic_cast
[解决办法]
如果你明白c++对象,类在内存中的布局就知道
如果按你所说 把一个父类转为子类,应该访问不了子类的函数,所以每个对象(注意是对象不是类)的函数应该存储在每个子类的对象哪里,而事实相反,一个类的函数是只有一份,所有本类型的对象共享这个函数表,所以把父类强制转换为子类,也可以直接访问子类的函数,只有访问子类特有的字段时,才会出错
[解决办法]
甚至可以有这样的写法
class A{
public:
 void test(){}
};
..
((A*)0)->test();
[解决办法]
楼主的精神值得发扬,MFC中指针强制转换有关问题,
[解决办法]
但是将父类指针强制转换成子类指针,父类中没有子类的一些新函数啊,怎么能访问呢,该如何解释啊?

因为GetDlgItem返回的实际就是这个按钮类的指针, 但是GetDlgItem是一个通用的函数, 所以会返回基类指针, 这样不管什么控件都可以使用这个函数获得其指针.
这就是继承的功能之一撒.

所以, 因为GetDlgItem返回的实际上就是那个控件的指针, 只是在返回前被强制转换成了父类CWnd类型, 
你调用GetDlgItem后, 再强制转换回来, 只是还原了这个指针本来的类型而以.


伪代码: (只供辅助解释上述意思)

CWnd* GetDlgItem(UINT uID)
{
     CButton* btn = new CButton;
     return (CWnd*)btn;
}

CButton *pBtn = (CButton*)GetDlgItem(0);

热点排行