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

解决方案 »

  1.   

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

  2.   

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