入口的指针和变量本身的指针究竟有何区别
编号:QA003394
建立日期: 2000年10月11日 最后修改日期:2000年10月11日
所属类别:
xzy:
尊敬的老师:
您好!我是一个学生。我在delphi的学习中遇到几个问题,百思不解。望赐教。
1.我在读参考书时看到这样一句话‘假设p1是过程类型的变量@p1将返回指向p1入口的指针,@@p1指返回指向变量p1本身的指针。’我不明白这句话的原因。入口的指针和变量本身的指针究竟有何区别?
2.子类中可以重载父类的过程,也可重新声明该过程,究竟这两种方式有何区别?重载的过程与父类的同名过程究竟有何联系?何种情况下必须重载?谢谢。
回答:
1、这个问题确实比较难理解。假设Func是一个过程变量,而MyFunc是一个过程,那么下面的比较就有问题了:
If Func = MyFunc Then
...
这句话可能会产生两种比较:
1、比较Func和MyFunc两个函数的返回结果是否相等
2、比较Func过程变量是否是MyFunc过程
为了避免这种歧义,Delphi规定If Func = MyFunc Then表示第一种理解,即比较函数结果,而Func和MyFunc不一定相同。而如果要比较后一种情况,就需要比较Func和MyFunc的入口地址是否相同,如:
If @Func = @MyFunc Then
这就是入口的指针的意义。如果要得到过程变量在内存中的实际地址,就是@@Func。
2、如果在子类中重新定义一个过程,则当调用对象的该过程时,不会调用父类的同名过程。但有时,父类的同名过程很有用,我们只是想在此基础上再添加一些功能,这时可以使用override,这样在调用子类的过程前先调用父类的同名过程。
此问题由李海回答。
| |
|
|
| |
|
|