声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5165|回复: 0

[C/C++] C++父类和子类对象指针之间的转换

[复制链接]
发表于 2005-7-22 20:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
C++父类和子类对象指针之间的转换,有示例代码<BR>C++父类和子类对象指针之间的转换
<br>由子类向父类转换很简单, 用默认转换.<BR>例如 CWnd* pWnd = (CWnd*)(&amp;ChildView);
<p>由父类向子类, 用dynamic_cast. 使用dynamic_cast是有限制的.<BR>例如对如下语句:<BR>CPoint3D* p1 = dynamic_cast(p);<BR>1.p虽然是CPoint类型, 但是p应当实际指向一个CPoint3D对象. 如果p实际指向的不是一个CPoint3D对象,则转换后的返回值为NULL.<BR>2.VC中必须在project setting中设定/GR选项, 即Enable Runtime Type Identification(RTTI).
<p>下面是一段示例代码:<BR>#include &lt;iostream&gt;<BR>using namespace std;
<p>class CPoint<BR>{<BR>public:<BR>virtual void f(){cout &lt;&lt; "CPoint::f" &lt;&lt;endl;}<BR>};
<p>class CPoint3D : public CPoint<BR>{<BR>public:<BR>virtual void f(){cout &lt;&lt; "CPoint3D::f" &lt;&lt;endl;}<BR>};
<p>int main() <BR>{<BR>CPoint point,*pPoint; <BR>CPoint3D point3D,*pPoint3D;
<p>//子类向父类类型转换,直接强制转换就可以了,但实际仍然指向子类对象<BR>pPoint = (CPoint*)&amp;point3D;<BR>pPoint-&gt;f(); //调用的仍然是子类的函数,这便是虚函数的魅力所在  
<p>//父类向子类类型转换,要用dynamic_cast<BR>pPoint3D = dynamic_cast(pPoint);<BR>pPoint-&gt;f(); //pPoint实际指向一个CPoint3D对象,故可以正确转换
<p>pPoint3D = dynamic_cast(&amp;point);<BR>cout &lt;&lt; (int*)pPoint3D &lt;&lt; endl; //&amp;point指向的不是一个CPoint3D对象,返回值为NULL<BR>return 0;<BR>}<BR>运行结果为:<BR>CPoint3D::f<BR>CPoint3D::f<BR>00000000
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-25 21:39 , Processed in 0.058411 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表