D demonP Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-16 #1 我想用类似C++的 : ObjPtr->BaseClass::BaseFunction() 的方式调用一个基类中的虚方法,派生子类中OVERRIDE了它, 现在我只能在子类的方法中用 inherited 实现,但不知道 如何从外部越过多态性的限制,直接调用基类虚方法。 请指点,谢谢!
我想用类似C++的 : ObjPtr->BaseClass::BaseFunction() 的方式调用一个基类中的虚方法,派生子类中OVERRIDE了它, 现在我只能在子类的方法中用 inherited 实现,但不知道 如何从外部越过多态性的限制,直接调用基类虚方法。 请指点,谢谢!
温 温柔一刀 Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-16 #2 没道理吧,如果你要仅仅使用基类中的虚方法,为什么不把对象声明为基类类型呢? 声明为子类类型,目的就是利用继承与多态的优势,并且把基类的信息封装起来了, C++中的过于灵活的方式会养成不良编程习惯的,外部程序也知道基类信息,这样合理吗? 当然,如果一定要实现,可以为你需要这样做的方法加参数来解决,例如: procedure childclass.proc1(BaseClassOnly:Boolean); begin inherited; if BaseClassOnly then exit else //子类本身处理 end
没道理吧,如果你要仅仅使用基类中的虚方法,为什么不把对象声明为基类类型呢? 声明为子类类型,目的就是利用继承与多态的优势,并且把基类的信息封装起来了, C++中的过于灵活的方式会养成不良编程习惯的,外部程序也知道基类信息,这样合理吗? 当然,如果一定要实现,可以为你需要这样做的方法加参数来解决,例如: procedure childclass.proc1(BaseClassOnly:Boolean); begin inherited; if BaseClassOnly then exit else //子类本身处理 end
D demonP Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-17 #3 to:温柔一刀 我只是好奇,想知道DEPHI能否实现,还没有碰见实际需要的地方, 我认为你说的有道理,太多的自由有时候反而添麻烦,另外,你说的 方法也就是我问题里说的在子类方法里用INHERITED吧,这个方法也 不能从“外部”实现我的要求. 这个问题似乎也不用再讨论了.谢谢 老兄了. TO:JAMES >>是什么意思?
to:温柔一刀 我只是好奇,想知道DEPHI能否实现,还没有碰见实际需要的地方, 我认为你说的有道理,太多的自由有时候反而添麻烦,另外,你说的 方法也就是我问题里说的在子类方法里用INHERITED吧,这个方法也 不能从“外部”实现我的要求. 这个问题似乎也不用再讨论了.谢谢 老兄了. TO:JAMES >>是什么意思?
温 温柔一刀 Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-17 #4 >>这个方法也不能从“外部”实现我的要求 可以呀,当你从外部调用子类的func1时候, 你调用childclass.func1(true),就实现了只调用基类方法, childclass.func1(false),就是调用整个方法。只不过都是 “走”了子类的过程,但结果应该是你需要的。
>>这个方法也不能从“外部”实现我的要求 可以呀,当你从外部调用子类的func1时候, 你调用childclass.func1(true),就实现了只调用基类方法, childclass.func1(false),就是调用整个方法。只不过都是 “走”了子类的过程,但结果应该是你需要的。
D demonP Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-18 #5 我的意思是,如果只有一个对象引用的情况(也就是不派生自己的子类)的 情况下进行访问,当然派生的方法也算是个变通的方法。 我问这个问题的用意关键在于想知道,在DELPHI中有没有C++里 objptr->BaseClass::func() 的直接等价物。看来应该是没有的了,是不是? 知道了这一点也就达到了我的目的。
我的意思是,如果只有一个对象引用的情况(也就是不派生自己的子类)的 情况下进行访问,当然派生的方法也算是个变通的方法。 我问这个问题的用意关键在于想知道,在DELPHI中有没有C++里 objptr->BaseClass::func() 的直接等价物。看来应该是没有的了,是不是? 知道了这一点也就达到了我的目的。
温 温柔一刀 Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-19 #6 应该是没有吧,希望是没有 ,可以等等其他人的意见。 另外,C++里真的有这种语法吗?我从来没注意过, 我觉得很不科学呀!实在不怎么样。
P Pipi. Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-20 #7 算出多少代, inherited inherited inherited MyMethod (连放几个inherited,行不行?没有delphi,试不了)
B BaKuBaKu Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-07 #9 var ObjName: TChildClass; begin ObjName.MethodName; TParentClass(ObjName).MethodName // 这样应该可以实现 end;
var ObjName: TChildClass; begin ObjName.MethodName; TParentClass(ObjName).MethodName // 这样应该可以实现 end;
温 温柔一刀 Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-18 #11 不知道这个问题什么时候结束的,我头都大了, 应该就是BaKuBaKu写的这样吧! 我怎么想也没想?大概是被提问者的说话方式弄糊涂了, 什么“越过多态的限制”,不就是强制转换吗? ObjPtr->BaseClass::BaseFunction() 这种语法C++也没有吧? 应该是(BASEClass *) ObjPtr->XXXXFunction();吧?
不知道这个问题什么时候结束的,我头都大了, 应该就是BaKuBaKu写的这样吧! 我怎么想也没想?大概是被提问者的说话方式弄糊涂了, 什么“越过多态的限制”,不就是强制转换吗? ObjPtr->BaseClass::BaseFunction() 这种语法C++也没有吧? 应该是(BASEClass *) ObjPtr->XXXXFunction();吧?
D demonP Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-18 #12 或许我说的不太清楚,C++是有这个语法的,强制转换是做不到 这个效果的,否则多态性就美意思了,你转换后调用的还是派生 类的函数。
温 温柔一刀 Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-19 #13 看来我脑子真的是大了,我原来说的对,现在却糊涂了,呵呵 现在再回头看,我的第一个贴字说得多好呀! 唉!又显示了一次不假思索回答问题的害处! C++真的有这语法?我怎么不记得了?