参考: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---介绍几个概念 && 对象是一个地地道道的指针的更多相关文章

  1. 谈谈Delphi中的类和对象3---抽象类和它的实例

    四.抽象类和它的实例 Delphi中有一个类称为是抽象类,你不能天真的直接为它创建一个实例,如 var StrLst: TString; begin StrLst:= TString.Create; ...

  2. 谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制

    五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...

  3. 谈谈Delph中的类和对象2---类可以理解成一种特殊的数据结构、类型转换

    三.类可以理解成一种特殊的数据结构 我们知道数据类型可以进行强制类型转换,类既然可以理解成一种数据类型,那么它也应该可以进行类型转换.比如下面代码为一个按钮(Button1)的单击事件 procedu ...

  4. Delphi中TStringList类常用属性方法详解

    TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...

  5. 【PHP】PHP中的类与对象

    面向对象并不是PHP的关键,但PHP确实能很好的支持面向对象编程,而且类与对象也成为了PHP5的核心组成部分.PHP的面向对象特性让构建大型的复制应用成为可能,有了类与对象,就自然产生了各种编程范式和 ...

  6. 【JAVA零基础入门系列】Day11 Java中的类和对象

    今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...

  7. Python Cookbook(第3版)中文版:15.19 从C语言中读取类文件对象

    15.19 从C语言中读取类文件对象¶ 问题¶ 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案¶ 要读取一个类文件对象的数据,你需要重复调 ...

  8. Java学习笔记十三:Java中的类和对象

    Java中的类和对象 一:什么是对象: 总的来说就是"万物皆对象",客观存在的事物皆为对象.是计算机所关注的具体信息. 对象(object)是一件事.一个物体.一个名词,或可以获得 ...

  9. Java程序设计基础笔记 • 【第7章 Java中的类和对象】

    全部章节   >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...

随机推荐

  1. The Adapter of ListView: Just adapt data to view, don’t do anything else

    The design of SimpleAdapter is not good in my opinion. An adapter should just adapter the data to vi ...

  2. 12 哈希表相关类——Live555源码阅读(一)基本组件类

    12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...

  3. 3-python学习——变量

    变量是我所接触过的编程语言中都具有的一个概念,只是这个概念有的强有的弱罢了. 1.什么是python的变量 变量这个东西怎么解释呢?不怎么好说. 这么说吧,变量就相当于一个代名词,或者说是名字. 计算 ...

  4. PHP5.4开启zend opcache缓存

    PHP5.5整合了zend opcache,但是5.4以下的需要自己安装. 介绍一下开启opcache方法,环境为wamp(php5.4.16) 下载dll文件 把php_opcache.dll放进p ...

  5. 【Networking】flannel,pipework,weave,udp,vxlan,ovs等资料

    Add Open vSwitch-based multitenant backend for use with OpenShift / Kubernetes:  https://github.com/ ...

  6. POJ 1661

    http://poj.org/problem?id=1661 这是一道DP的题目,求最优解 上面的这一个题是对于那个重左边开始上的函数的解释 题目要求的是从最高掉下来的小时间,那么我们就可以求从最低处 ...

  7. adb 服务端口2037被占,导致adb和appium无法工作

    症状1: 命令行运行 adb 相关命令,提示如下: adb server is out of date. killing...ADB server didn't ACK* failed to star ...

  8. ios coredata 无任何错误提示crash

    最近写程序是遇到了一种情况,对coredata 操作时,有一定几率crash,crash时无任何说明,断点调试后发现,fetch出的对象的属性竟然和数据库中的不同,不知道什么情况下导致了context ...

  9. javascript 导出Excel

    测试兼容IE google 火狐浏览器.看到的朋友也许你某一天也会需要. //obj是table表格外面嵌套div id function saveCode(obj) { try { var strH ...

  10. java web 学习 --第三天(Java三级考试)

    第二天的学习内容这里:http://www.cnblogs.com/tobecrazy/p/3446646.html Jsp中的动作标签 <jsp:include> 实现动态包含,在一个文 ...