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的虚方法表。正常了。

  • 相关阅读:
    赋值问题
    构造方法的作用
    this的使用
    三目运算符和形参的使用
    构造方法作用:给所有对象进行相同的初始化操作
    成员变量和局部变量
    相关开发的书籍名汇集
    html ---- web sql 例子
    让input表单输入框不记录输入过信息的方法
    css实现两端对齐的3种方法
  • 原文地址:https://www.cnblogs.com/yanyyx/p/1314265.html
Copyright © 2011-2022 走看看