免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1689 | 回复: 3
打印 上一主题 下一主题

请教一个运行时确定类型的问题,谢过先 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-28 14:59 |只看该作者 |倒序浏览

  1. class BaseType
  2. {
  3.     ......
  4. };
  5. class SubTypeA1 : public BaseType
  6. {
  7.     .......
  8. };
  9. class SubTypeA2 : public BaseType
  10. {
  11.     .......
  12. };
  13. .....若干个子类
复制代码


定义一个函数,使用基类指针作为输入参数。在函数中需要new一个对象并用输入的对象进行深拷贝构造。
同时将输入的对象销毁

  1. int function(BaseType* rstBaseType)
  2. {
  3.      .......
  4.      /*使用深拷贝构造一个对象*/
  5.      new SubTypeX(rstBaseType);
  6.      delete rstBaseType;
  7.      ......
  8. }
复制代码

可以明确知道的是输入对象一定是某一个子类。
1、现在的问题是后面的处理需要获得输入对象的确定类型,请问有什么方法可用?
2、请问哪位仁兄了解typeid,typeof,以及dynamic_cast的用法,请指教,多谢

论坛徽章:
0
2 [报告]
发表于 2006-07-28 16:57 |只看该作者

  1. int function(BaseType* rstBaseType)
  2. {
  3.         ......
  4.         if(NULL!=dynamic_cast<SubTypeA1*>(rstBaseType))
  5.         {
  6.                 //SubTypeA1
  7.         }
  8.         else if(NULL!=dynamic_cast<SubTypeA2*>(rstBaseType))
  9.         {
  10.                 //SubTypeA2
  11.         }
  12.         else
  13.         {
  14.                 //BaseType
  15.         }
  16.         delete rstBaseType;
  17.         ......
  18. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2006-07-28 17:17 |只看该作者
class BaseType 提供Clone纯虚函数,SubTypeX override这个函数,是通常的做法
int function(BaseType* rstBaseType)
{
     .......
     /*使用深拷贝构造一个对象*/
     rstBaseType->Clone();
     delete rstBaseType;
     ......
}

论坛徽章:
0
4 [报告]
发表于 2006-07-29 11:02 |只看该作者
多谢2位的指点,还想请问一下,如果想详细了解一下<typeinfo>,哪里能搞到一些资料?
另外还有一个问题,如果函数传入的是一个void类型的指针,使用强制转换后得到基类指针。还能不能支持多态?dynamic_cast这样的操做是不是总是有效?
回头写个例子试一下,那位仁兄如果了解多态的实现机制,不妨赐教,多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP