热情软件屋

 

入口的指针和变量本身的指针究竟有何区别


编号: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,这样在调用子类的过程前先调用父类的同名过程。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio