谈谈Delphi中的类和对象1---介绍几个概念 && 对象是一个地地道道的指针
参考:http://blog.163.com/liang_liu99/blog/static/88415216200952123412180/
以下的介绍主要针对的是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的对象‘指针’作为参数传递
谈谈Delphi中的类和对象1---介绍几个概念 && 对象是一个地地道道的指针的更多相关文章
- 谈谈Delphi中的类和对象3---抽象类和它的实例
四.抽象类和它的实例 Delphi中有一个类称为是抽象类,你不能天真的直接为它创建一个实例,如 var StrLst: TString; begin StrLst:= TString.Create; ...
- 谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制
五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...
- 谈谈Delph中的类和对象2---类可以理解成一种特殊的数据结构、类型转换
三.类可以理解成一种特殊的数据结构 我们知道数据类型可以进行强制类型转换,类既然可以理解成一种数据类型,那么它也应该可以进行类型转换.比如下面代码为一个按钮(Button1)的单击事件 procedu ...
- Delphi中TStringList类常用属性方法详解
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...
- 【PHP】PHP中的类与对象
面向对象并不是PHP的关键,但PHP确实能很好的支持面向对象编程,而且类与对象也成为了PHP5的核心组成部分.PHP的面向对象特性让构建大型的复制应用成为可能,有了类与对象,就自然产生了各种编程范式和 ...
- 【JAVA零基础入门系列】Day11 Java中的类和对象
今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...
- Python Cookbook(第3版)中文版:15.19 从C语言中读取类文件对象
15.19 从C语言中读取类文件对象¶ 问题¶ 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案¶ 要读取一个类文件对象的数据,你需要重复调 ...
- Java学习笔记十三:Java中的类和对象
Java中的类和对象 一:什么是对象: 总的来说就是"万物皆对象",客观存在的事物皆为对象.是计算机所关注的具体信息. 对象(object)是一件事.一个物体.一个名词,或可以获得 ...
- Java程序设计基础笔记 • 【第7章 Java中的类和对象】
全部章节 >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...
随机推荐
- Linux中的动态库和静态库(.a/.la/.so/.o)
Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...
- PyQt4多线程定时刷新控件
1.通过事件关联和线程关联的方法刷新控件 self.listview=updatelistview()self.listview.updateText.connect(self.viewlist) ...
- 转:安装MySQL遇到MySQL Server Instance Configuration Wizard未响应的解决办法
问题:安装了MySQL之后进入配置界面的时候,总会显示“MySQL Server Instance Configuration Wizard未响应”,一直卡死. 解决办法:Win7系统中,以管理员的权 ...
- Ubuntu下安装eclipse
一.eclipse安装环境JDK的安装 1.下载JDK 从官网下载jdk8 jdk-8u5-linux-x64.tar.gz 2.解压$ tar -zxvf jdk-8u5-linux-x64.tar ...
- POJ 1258
http://poj.org/problem?id=1258 今天晚上随便找了两道题,没想到两道都是我第一次碰到的类型———最小生成树.我以前并没有见过,也不知道怎么做,然后就看书,思路很容易理解 但 ...
- php如何妩媚地生成执行的sql语句
会不会碰到这样一种情况呢?每次获取数据将数据和历史版本都有一定的差别,然而用ThinkPHP的addAll()函数,却会将已有的数据删掉再重新写入.这明显不是我们想要的.但自己写sql每次几十个字段也 ...
- python之集合,函数,装饰器
本节主要内容如下: 1. set集合 2. 函数 -- 自定义函数 -- 内置函数 3. 装饰器 一. set 集合: 一个无序且不重复的序列. tuple算是list和str的杂合(杂交的都有自己的 ...
- Mac会给你一些欣喜
Mac会给你一些欣喜 以前一直没有用过Mac,一直都是用Windows的电脑,只是偶尔会去用Ubuntu这样的Linux系统.Mac OS 确实是一只可以给你欣喜的系统. 上周拿到公司分发的Mac,到 ...
- html中的alt和title用法区别
html中的alt和title用法区别 首先明确一下概念,alt是html标签的属性,而title既是html标签,又是html属性.title标签这个不用多说,网页的标题就是写在<title& ...
- (转)JAVA AJAX教程第三章—AJAX详细讲解
现在开始深入AJAX,这里还是按老思路,理论和实践相结合.这章的内容主要是讲解AJAX步骤详解,下一张将会用一个AJAX技术实现页面提示效果的实例来说明AJAX的实现. 一.AJAX步骤详解 AJAX ...