Record与Class.向大家请教. (100分)

  • 主题发起人 主题发起人 zlj555
  • 开始时间 开始时间
Z

zlj555

Unregistered / Unconfirmed
GUEST, unregistred user!
我用RECORD和CLASS存放两组数据,我通过在一个过程里用
PointerArr : TList;

procedure TForm1.addRec;
var
midRec : pMyRec;
begin
new(midRec);
midRec^.name := 'zlj';
midRec^.caption :='caption';
if PointerArr.Count <> 0 then
midRec.caption :=midRec.caption+IntToStr(PointerArr.count);
PointerArr.Add(midrec);
end;
按上我可以保存一组记录.
但是我把Record改成了class则不可以,也许我代码有问题,大家帮忙看一下.
以下不能保存任何数据.
var
midclass : TMyClass;
pmidClass :pMyClass;
begin
new(pmidClass);
pmidClass := TMyClass.Create;
pmidClass^.name :='zlj';
pmidClass^.caption := 'caption'+IntToStr(PointerArr.count);
pointerArr.Add(pmidClass);
 
呵呵,看来你应该多看看书才行喲

var
midclass : TMyClass;
pmidClass :pMyClass;
begin
new(pmidClass); //给指针分配空间
midClass := TMyClass.Create; //创建对象
pmidClass := @midClass; //??——这样并不能实现内存复制,只会让pmidClass指向@midClass
//在Delphi中,对象变量就是指向对象实例的内存指针,因此上面的 @ 纯属多余
//况且midClass并不直接指向对象的数据区——对象的头部有一个vmt表入口指针 (看不懂就看书)
//这个指针的后面才是数据——Pointer(DWord(midClass)+4)
//得到了对象的内容起始地址,就可以System.Move过程复制对象信息了
pmidClass^.name :='zlj';
pmidClass^.caption := 'caption'+IntToStr(PointerArr.count);
pointerArr.Add(pmidClass);
//既然用了类,为什么还要用结构?这不是多此一举吗——你的编程思想比较混乱,没有完全OO
//应该在对象中定义一个方法,将内部信息写入结构中,而不是在外面这样冒失的直接使用指针
 
我没有用结构,一个是Record,一个是Class,我想保存一个类的多个实例的地址。然后利用
复杂的数据我会用Class,但简直的我当然会用Record了
 
谢谢,你说的很对,我这个确实不太理解,今天也让别人给我上了一课。
但这个程序有些地方只是为了试验TLIST所以没有考虑,但以后我会注意:)
现在我已经解决了,
new(pmidClass);
midClass := TMyClass.Create;
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
836
import
I
I
回复
0
查看
658
import
I
后退
顶部