创建对象的疑惑 ( 积分: 30 )

  • 主题发起人 主题发起人 njcliff
  • 开始时间 开始时间
N

njcliff

Unregistered / Unconfirmed
GUEST, unregistred user!
刘艺《Delphi面向对象编程思想》中-第4章使用对象->使用对象集->系统登录 中的示例程序(第164页)
新建一个类Profile如下,然后将ClientDataSet1中的数据(登录信息)赋值给类Profile的一个对象AMan,最后再由AMan保存到对象集Profile

List;

TProfile = class(TObject)
Name : String;
Dep : String;
Password :String;
Job : String;
......
var
ProfileList: TObjectList;
i:integer;
AMan:TProfile;
begin
......
ProfileList:=TObjectList.Create(True);
//AMan:=TProfile.Create;{标记2}
ClientDataSet1.first;
for i:=0 to ClientDataSet1.RecordCount -1 do
begin
AMan:=TProfile.Create;{标记1}
AMan.Name:=ClientDataSet1.FieldByName('Name').AsString;
AMan.Job:=ClientDataSet1.FieldByName('Job').AsString;
AMan.Dep:=ClientDataSet1.FieldByName('Dep').AsString;
AMan.Password :=ClientDataSet1.FieldByName('Password').AsString;
ProfileList.Add(AMan);
ClientDataSet1.Next;
end;

......

我将例子中标记1的AMan:=TProfile.Create放在标记2的位置,编译可以通过,却发现对象集Profile中保存的记录全部是ClientDataSet1的最后一条记录,但是记录条数没有变化。如果注销标记2的语句,恢复到标记1的位置,则一切正常。
请大侠分析一下原因,我目前正在看面向对象,但是对怎么创建一个对象理解的还是比较吃力;
 
刘艺《Delphi面向对象编程思想》中-第4章使用对象->使用对象集->系统登录 中的示例程序(第164页)
新建一个类Profile如下,然后将ClientDataSet1中的数据(登录信息)赋值给类Profile的一个对象AMan,最后再由AMan保存到对象集Profile

List;

TProfile = class(TObject)
Name : String;
Dep : String;
Password :String;
Job : String;
......
var
ProfileList: TObjectList;
i:integer;
AMan:TProfile;
begin
......
ProfileList:=TObjectList.Create(True);
//AMan:=TProfile.Create;{标记2}
ClientDataSet1.first;
for i:=0 to ClientDataSet1.RecordCount -1 do
begin
AMan:=TProfile.Create;{标记1}
AMan.Name:=ClientDataSet1.FieldByName('Name').AsString;
AMan.Job:=ClientDataSet1.FieldByName('Job').AsString;
AMan.Dep:=ClientDataSet1.FieldByName('Dep').AsString;
AMan.Password :=ClientDataSet1.FieldByName('Password').AsString;
ProfileList.Add(AMan);
ClientDataSet1.Next;
end;

......

我将例子中标记1的AMan:=TProfile.Create放在标记2的位置,编译可以通过,却发现对象集Profile中保存的记录全部是ClientDataSet1的最后一条记录,但是记录条数没有变化。如果注销标记2的语句,恢复到标记1的位置,则一切正常。
请大侠分析一下原因,我目前正在看面向对象,但是对怎么创建一个对象理解的还是比较吃力;
 
在标记1的位置没循环一次就创建一个AMan对象,而在标记2的位置只创建一个AMan对象
明白了吗?
 
对象只创建一次,每个循环只不过重复赋值给该对象的属性而已,后面的值肯定会覆盖前面的值。
注意,对象的变量,仅仅相当于“指针”而已,他指向一个“实在”的对象,或者指向一个不知道什么地方的内存空间。
 
to 暗月
羞愧中,现在想起来我还做过关于对象的变量附值读书笔记。
谢谢了
 
多人接受答案了。
 
yostgxf,大哥,你说的话我在TP时代就理解了 :)
 
后退
顶部