CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

类的转换

楼主netsky()2000-01-13 22:18:00 在 C/C++ / C语言 提问

在C++中把一个基指针强制为派生指针并存取整个派生类是可以的,但相反呢?  
  派生类指针可以转换为基类指针吗?没有关联的类可以互相转换吗?  
  为此作了一个例程:  
  class   ca  
  {  
  public:  
      void   testa(){printf("test   ca");}  
  }  
   
  class   cb  
  {  
  public:        
            void   runother(){};  
            void   test(){printf("test   cb");}  
  }  
   
  class   cc:public   ca,cb  
  {  
  public:  
          void   test(){printf("test   cc");}  
  }  
   
  main()  
  {  
  ca   *a;  
  cb   *b;  
  cc   *c;  
   
  c=new   cc;  
  c->test();  
  a=(ca*)c;  
  a->testa();  
  b=(cb*)a;     //俩个没有关系的类指针的互换  
  b->test();  
  }  
  在VC6下调试通过,但理论依据是什么呢?随便哪两种类都可以互相强制转换吗?  
  我没想清楚,还请各位帮我理解一下,谢谢。 问题点数:50、回复次数:3Top

1 楼kxy(手举穿肠毒药,怀抱刮骨钢刀)回复于 2000-01-13 22:34:00 得分 40

c++中一个类的不同实例实际就是一片内存,同一个类的不同实例成员函数  
  相同内存,数据不同内存.  
  你的写法,a,b,c是指针,指针的值是一个32位整数,自然可以指向任何地方.  
  你的代码中,b   指向了   c   可以的,(Free可能有问题).  
   
  你还可以这样写  
   
  int   *mm;  
  mm   =   (int*)c;  
   
  b   :=   (cd*)mm;  
   
  void   *mm;  
  mm   =   (void*)c;  
  b   =   (cb*)mm;  
   
  Top

2 楼Nico()回复于 2000-01-13 23:56:00 得分 10

这正是c++指针的危险之处,小心你的程序编译运行之后一堆Access   Violation.Top

3 楼gun2()回复于 2000-03-05 05:38:00 得分 0

我实在是受不了啦!  
   
  c++的语法是允许直接将派生类指针赋给基指针变量,但反之则须强制类型转换。他们对于出错的提醒是有必要留心的!如果说理论根据,我只能回答,这就是c++的语法。Top

相关问题

  • 类型转换!
  • 类型转换???
  • 类型转换????
  • 类型转换????
  • 转换类型
  • 类型转换?
  • 类型转换
  • 类型转换
  • 类型转换
  • 类型转换

关键词

  • c++
  • 指针
  • 转换
  • 内存
  • ca
  • 类
  • 派生
  • cb
  • mm
  • cc

得分解答快速导航

  • 帖主:netsky
  • kxy
  • Nico

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo