zoukankan      html  css  js  c++  java
  • 不知不觉中学习了RTTI

    类的对象引用。

    TA类为为基类,类TAA与TAB为TA类的派生类。

    在TA中定义了方法 procedure ABC;

    在TAA、TAB中也定义了方法procedure ABC;

    对象A是由TA类的派生类(TAA、TAB)生成的对象。由于对象A的构造对象的不确定,在引用对象A的方法ABC的时候需要使用构造类的方法ABC。

    在开始的时候

     1 Type
     2   TA = Class (TObject)
     3   public
     4     procedure ABC;
     5   end;
     6 
     7   TAA = Class (TA)
     8   public
     9     procedure ABC;
    10   end;
    11 
    12   TAB = Class (TA)
    13   public
    14     procedure ABC;
    15   end;
    16 

    定义对象A

     

    1 A : TA;

    生成对象

    A := TAA.Create;

    在使用对象A的方法ABC的时候,就直接调用了类TA的方法ABC,由于目的是想调用类TAA的方法。问题出在哪里呢?

    由于类中使用了静态的方法 procedure ABC,在是编译的时候Delphi就 定义了 A : TA,也就是以TAA或TAB类生成的A方法 procedure ABC 在这里也将静态的指向TA类的方法procedure ABC。

    只有将类TA中的方法声明为 procedure ABC;virtual;

    派生类TAA、TAB的声明为 procedure ABC;override;

    使用了RTTI的VMT的虚方法表。正常了。

  • 相关阅读:
    PHP 数据类型
    PHP SAPI
    PHP 基础架构
    PHP7的变化
    mysql 选择优化的数据类型需要注意的几点
    彻底删除在github上提交的文件
    php7 新特性
    php缓冲区 一些笔记
    设计模式 一些概念
    mysql性能优化其中一部分小结
  • 原文地址:https://www.cnblogs.com/yanyyx/p/1314265.html
Copyright © 2011-2022 走看看