delphi7中面向对象2

1.动态联编可以通过两种方法实现,一种是使用 virtual 和 dynamic,虚方法和动态方法在功能上是等价的,他们的不同在于:虚方法的调用速度比较快,而动态方法的代码数量比较少。

2.虚方法和动态方法可以使用指令字 abstract 说明,则该方法为抽象方法,包含抽象方法的类被称为抽象类。

3.抽象方法不可以定义函数体,本身必须是虚方法或动态方法。

抽象方法的测试:

program Project1;

{$APPTYPE CONSOLE}

type
  { A类 }
  Ta = class
  procedure show;virtual;abstract;
  end;
  { B类 }
  Tb = class(Ta)
  procedure show;override;
  end;
  { B类型的implement方法实现 }
  procedure Tb.show;
  begin
    Writeln('B');
  end;
var
  x:Tb;//定义一个B类对象
begin
  x := Tb.Create;//实例化一个对象
  Writeln('1.首先定义了一个 Ta 类,它具有一个abstract,virtual的 show 方法');
  Writeln('2.从 Ta 类派生出一个 Tb 类,它 override 了 Ta 类中的 show 方法');
  Writeln('3.实现 Tb 中的 show 方法');
  Writeln('4.定义一个 Tb 类变量 x 并实例化,调用 x 的 show 方法,显示如下:');
  x.show;
  Readln;
end.

4.delphi7中具有2中多态,一种是编译时多态,一种是运行时多态。编译时的多态是指 overload 重载,应为编译器可以根据方法的参数个数和类型就可以知道将原代码翻译成不同的代码;动态多态是指虚方法。编译时不能确定具体运行哪种方法,只有在运行时才能确定。

5 overload 测试

program Project1;
{$APPTYPE CONSOLE}
uses
  { 在使用 inttostr 或 floattostr 时,需要引用这个单元}
  SysUtils;
  {
    function : find the max from a and b
    parameters:
      a:integer
      b:integer
    return
      integer;
  }
  function Max(var a,b : Integer):Integer;overload;
  begin
    if a > b then
      result := a
    else
      result := b;
  end;

  {
    function : find the max from a and b
    parameters:
      a:real;
      b:real;
    return
      real;
  }
  function max(var a,b : Real):Real;overload;
  begin
    if a > b then
      result :=a
    else
      result := b;
  end;
var
  x,y,max1:Integer;
  a,b,max2:real;
begin
  x := 1;
  y := 2;
  a := 1.1;
  b := 1.2;
  max1 := Max(x,y);
  max2 := Max(a,b);
  Writeln('定义了2个同名函数 Max,参数不一样');
  Writeln('max1 = ' + inttostr(max1));
  Writeln('max2 = ' + floattostr(max2));
  Readln;
end.

6.delphi中有一个指向调用本方法的对象的指针。self,谁调用这个方法,self就指向谁。

相当于java 中的 this 。

7.如果function 和 procedure 用class 修饰,则这个方法属于类,而不属于具体的对象。

相当于java 中的静态方法。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值