博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈谈Delphi中的类和对象1---介绍几个概念 && 对象是一个地地道道的指针
阅读量:4628 次
发布时间:2019-06-09

本文共 1505 字,大约阅读时间需要 5 分钟。

参考:

以下的介绍主要针对的是Delphi的面向对象的知识,可能和C++、Java、PHP……其他面向对象的编程语言有一些出入 

 

一、介绍几个概念

  说到类和对象,我们不能不提及这样几个概念:类、对象、实例。谈谈“我”的简单理解

  对象指的是泛称,自然界的任何实体都可以看成是一个对象

  类是以这些对象某些特征而分成的一系列的种类

  实例则是特质属于某一个类的一个对象

  例子:

var    ABtn: TButton;

  ABtn是属于TButton类的一个对象,但是ABtn不能输是一个实例,因为它还没有创建,所以我么说这是定义了一个对象,如果说定义了一个实例,多多少少有一些不够确切

  要想创建一个实例(也就是在内存中实际创建一个存在的类的实例),参见

var    ABtn: TButton;    //这并没有创建一个类的实例begin    ABtn:= TButton.Create(Self);    //这才是创建了一个实例,这才真正在内存中存在    ABtn.Caption:= 'Button';    ABtn.Free;    //这是将创建的实例释放(Free先判断这个对象实例ABtn是否为NIL,再决定是不是调用析构方法Destroy)end;

  

二、对象变量是一个地地道道的指针

  从物理角度看,对象就是一段地址空间,这段地址空间的标志就是我们定义的类“变量”。所以我们可以把对象变量看成是一个类的指针(指向内存中的真正的对象实体或者为nil)。

  大家也知道,要想访问一个指针,必须要对指针初始化。对象既然是一个指针,也必须对它进行初始化。

  如何对对象初始化呢?还是先看看指针的初始化吧。对于一个指针可以有以下两种方法进行初始化

1)直接分配

var    Pint: ^Integer;begin    New(Pint);    Pint^ := 12;        DisPose(Pint);end;

2)指向别的已分配空间的变量

var    Pint: ^integer;    i: Integer;begin    i:= 12;    Pint:= @i;end;

  有趣的是,对象这种“指针”也有两种方法初始化

1)直接分配

var    AForm: TForm;begin    AForm:= TForm.Create(Self);    AForm.ShowModal;    AForm.Free;end;

2)指向别的已经分配空间的实例

var    AForm: TForm;begin    AForm:= Self;    AForm.Caption:='???';end;

  上面这段代码,AForm和它所指向的Form实例共用同一段地址单元,所有对AForm的操作都将反映到它所对应的Form实例之上

 

  说到这里,我们就能很好的解释为什么过程(函数)的对象参数传递时候,有这样的格式

procedure SetEdit(var Edit: TEdit);begin    Edit.Text:= '11';end;

  和

procedure SetEdit(Edit: TEdit);begin    Edit.Text:='11';end;

  这两种方式从最终的效果上来看是一样的。第一种是吧TEdit作为参数引用的形式进行参数传递,第二种是把一个TEdit的对象‘指针’作为参数传递

 

转载于:https://www.cnblogs.com/xumenger/p/4437231.html

你可能感兴趣的文章
leaflet地图框架
查看>>
mybatis的一些基础问题
查看>>
封装、继承、多态
查看>>
visual webgui theme designer
查看>>
【制作镜像】BCEC制作镜像
查看>>
Hadoop学习笔记之三 数据流向
查看>>
程序员眼中的英文单词是这样的
查看>>
Leetcode: Sort List
查看>>
gitlab搭建
查看>>
python_day10
查看>>
ios中的自动释放池
查看>>
Android Layer List 使用实现实例
查看>>
CSipSimple 工程分析 <1>
查看>>
关于DWG文件转换成PDF
查看>>
Jerry眼中的SAP客户数据模型
查看>>
c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]
查看>>
CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...
查看>>
[面试]future模式
查看>>
Beta冲刺 (1/7)
查看>>
cap理论与分布式事务的解决方案
查看>>