本帖最后由 u012117131 于 2013-09-15 18:29:34 编辑

解决方案 »

  1.   

    sub是D类型的,当然调用D.sub
    你要调用B的话,需要将D的sub声明为virtual
    D的用override覆盖。
      

  2.   


    我这样从写了,但是问题来了,这样可以调用B.aa的方法,D.A.aa里面有个循环,对D sub进行循环赋不同的值,可是维数对了,调用的却是同个对象??这个方法,我是这样改写的,
    D.A.aa{
    for(int i=0;i<3;i++)
    D dd=(D)sub
    dd.aa(p); 
    }还是同一个对象???测试的结果如下:i = 1 ; a[0] = 1024;
    i = 2 ; a[1] = 1025; a[1] = 1025;
    i = 3 ; a[2] = 1026; a[1] = 1026; a[1] = 1026;
      

  3.   


    我这样从写了,但是问题来了,这样可以调用B.aa的方法,D.A.aa里面有个循环,对D sub进行循环赋不同的值,可是维数对了,调用的却是同个对象??这个方法,我是这样改写的,
    D.A.aa{
    for(int i=0;i<3;i++)
    D dd=(D)sub
    dd.aa(p); 
    }还是同一个对象???测试的结果如下:i = 1 ; a[0] = 1024;
    i = 2 ; a[1] = 1025; a[1] = 1025;
    i = 3 ; a[2] = 1026; a[1] = 1026; a[1] = 1026;说明一下 D 继承的是 ArrayList 这个结果是 D 的
      

  4.   

    要么将P定义成结构体(struct)
    要么拷贝:
    P newp = new P();
    newp.xxx = p.xxx;
    ...
    dd.aa(newp);