关于C++的类型转换

来源:百度知道 编辑:UC知道 时间:2024/06/28 11:07:56
我现在在学习VC

对下面语句迷惑不解
CFrameWnd* pTarget = (CFrameWnd*)GetOwner();
由GetOwner()得到的是(CWnd*)对象,
但前面的CFrameWnd*不是已经做了类型转换吗?
后面的(CFrameWnd*)再做一次转换是不是多余呢?
后面的(CFrameWnd*)转换时是不是要调到默认构造函数构造无名对象呢?不然这么做有什么意义?

请大虾一一给予解答?谢谢

1。CFrameWnd* pTarget是定义变量的类型;

2。(CFrameWnd*)GetOwner(); 是做类型转换;
如果不写的话,是隐式类型转换,但必须合法,编译器才能通过;CFrameWnd是CWnd的派生类,是向下转型,所以必须要显式类型转换,如果反过来就不用写了;

3。类型转换时是要调用一个默认构造函数构造无名对象,但这个是CFrameWnd*类型,是个指针,所以就算是真的有构造也只是多了一个临时指针变量而已;

前面的CFrameWnd* 定义 pTarget的类型~

后面的 (CFrameWnd*)是对GetOwner();的返回值做类型转换~

两个是不同的