日期:2014-05-20  浏览次数:20702 次

强制转换的问题
问题有类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++中这样把我弄糊涂了

------解决方案--------------------
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里面从来都不能从上往下转型的。