从父类TShap继承出三个类TEllipse,TRect,TLine.父类中的virtual方法draw(),都重载了如何利用父亲类的对象,或指针调用继承类对象的draw().AllObjLink:TObjectList;链表中无续保存了三个类的对象,遍历链表调用每一对象的draw()方法,需把AllObjLink[i]转换为对应的类型,能不能转换成父类型,利用父类型对象调用子类型方法?

解决方案 »

  1.   

    AllObjLink[i] as TLine或TLine(AllObjLink[i])
      

  2.   


    从链表中取得的对象,不能确定是TLine,TEllise还是TRect,所以不能用
    TLine(AllObjLink[i])或
    AllObjLink[i] as TLine
    有什么办法办法确定对象的具体类,然后转换也行。最好是
    TShap(AllObjLink[i]).Draw,
    但这样调用的是父类的Draw(),如何通过父类调用子类方法。
    大狭们请教了。
      

  3.   

    HsWong的方法对的,子类override父类virtual
    然后将对象转换为父类类型,调用父类virtual方法自动为子类方法,子类重载时override 变为overload,不能用virtual的父类方法调用子类方法。