首页 > 编程语言 >delphi D11编程语言手册 学习笔记(P225-P343) OOP(面向对象)

delphi D11编程语言手册 学习笔记(P225-P343) OOP(面向对象)

时间:2022-11-21 18:45:15浏览次数:68  
标签:P343 TAtype D11 自定义 delphi 内存 Create string 构造函数

 

 这本书可以在 Delphi研习社②群 256456744 的群文件里找到. 书名: Delphi 11 Alexandria Edition.pdf

●P139

  类是抽象的,变量是类的具现.

  类在定义时,只是定义了它有这些属性和方法,不会把实际代码写在里面,但是必须要在同一个单元里完成(实际代码可写在dll里面然后链接进来,但不推荐),这使得类的源码更加精简与直观.

  请注意类的定义顺序:

   TBtype = class
    B:  TAtype;//Error: [dcc32 错误] Unit1.pas(28): E2003 未声明的标识符:'TAtype'
  end;

  TAtype = class
    str: string; //Error: [dcc32 错误] Unit1.pas(31): E2004 重复声明标识符:'TAtype'
  end;

上面的代码,只要把TBtype与TAtype定义的顺序调整一下就没问题了

  Delphi 小白来学类

在写类的方法与过程代码的时候,需要声明这个方法或者过程是归属于哪个类的,就跟控件事件前面要加窗体名称一样,因为窗体也是一个类.

procedure TBtype.SetValue(M D, Y: Integer);
Begin

end;

function TAtype.LeapYear: Boolean;
Begin

end;

1.重载构造函数overload关键字
eg:
    constructor Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);overload;
    constructor Create(Name:string;Sex:string);overload;     
ps: 重载构造函数,注意一定要使用关键字:overload

2.自定义类中是否需要显式定义构造函数:
    所有类默认继承自TObject,即使没有声明class(TObject),Create实际是通知编译器为其分配一块堆内存.在自定义类中,即使没有显式的定义构造函数,程序默认调用的是TObject的构造函数.

3.TObject.Free的真正作用:实际上只是为"堆内存块"解锁,使得其他程序可以使用该块堆内存,而引用并没有被 重置为nil,因此,经常Free之后,仍可以正确访问到对象的成员变量(解锁后,该块内存没有被其他程序使用)

4.自定义的类,什么时候需要专门定义析构函数?
     自定义的类中,含有类成员.由于Free操作只是对当前对象的"堆内存块"进行了解锁,而类成员指向的另一块"堆内存块" 并没有被解锁,如果不在析构函数中对其解锁,则会造成内存泄漏.


5.不需要程序员显示调用Free的自定义类?
     对于从Tcomponent继承下来的对象,在Create的时候可以指定一个所有者。如果一个对象在创建时指定了所有者,那么该对象的生存期将由所有者进行管理。所有者在析构时,会同时析构它所拥有的全部对象。


6.自定义类中,如何定义析构函数?
     Delphi中所有类都继承自TObject ,Create默认不是虚方法 ,Destroy默认是虚方法.被覆盖的函数必须是虚(virtual)的,或者是动态(dynamic)的,因此自定义类的Destroy方法可以被覆盖. 而VCL中组件继承的大多Create都被声明成虚方法了。

 

标签:P343,TAtype,D11,自定义,delphi,内存,Create,string,构造函数
From: https://www.cnblogs.com/yoooos/p/16910829.html

相关文章