强制转换的问题

lingkeylbh 2007-06-04 10:25:53
问题有类A和B,B是A的子类,
在C++(VC6.0),A* a = new A();B* b = (B*)a;ok
在JAVA,A a = new A();B b = (B)a;运行出现ClassCastException;
本来我想当然认为应该是java这种思路的,可是C++中这样把我弄糊涂了
...全文
212 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanransoft 2007-06-04
  • 打赏
  • 举报
回复
java里面从来都不能从上往下转型的,只能从下向上转。
believefym 2007-06-04
  • 打赏
  • 举报
回复
c++里面指针的强制转换肯定没有问题的,就是如何看待一个地址存储类型的问题,至于强制转换后的后果是不可知的。就像你可以把一个int*强制转换为float*一样,转换的过程不可能出问题
#include <iostream>
using namespace std;
class A
{
public:
int i;
A(int a):i(a){}
};

class B:public A
{
public:
int j;
B(int a,int b):A(a),j(b){}
};

int main()
{
for(int i=0; i<100; ++i){
A* a = new A(1);
B* b = (B*)a;
cout<<b->j<<endl;}//a、b指向同一块区域,可以打印&(*a),但是sizeof(*a)=4,sizeof(*b)=8,内存要靠自己去维护
system("pause");
return 0;
}


java里面从来都不能从上往下转型的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧