类的相互引用实例,Forward declarations(100分)

L

lps

Unregistered / Unconfirmed
GUEST, unregistred user!
OPLG中有如下例子,但怎么用?
type
TFigure = class
// forward declaration
TDrawing = class
Figure: TFigure;
end;
TFigure = class // defining declaration
Drawing: TDrawing;
end;
 
没有TFigure = class
// forward declaration
以下会出错:
TDrawing = class
Figure: TFigure;
end;
向前声明,先表明它是“存在”的。真正的定义只能在定义 TDrawing 后再进行。
其实是一种“递归”定义。
 
我知道如何定义它,也知其语法!
 
>>怎么用
您既然知道如何定义又知道语法,怎么还会有这个问题?反正我编了4年Delphi程序,好像
就用到了一两次。——不就是两个类要互相引用嘛。
 
什么怎么用?就那样用呗。向前声明嘛!
 
可以入下使用:
type
TA = class
// forward declaration
TB = class
fb:string;
A: TA;
end;
TA = class // defining declaration
fa:string;
B: TB;
end;
...
var
Form1: TForm1;
oa:ta;
ob:tb;

implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(oa.B.A.B.fb);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
oa :=ta.Create;//只要这两处的CREATE
oa.fa:='oa.fa';
oa.B:=tb.Create;//这些CREATE可否不要,而在TA,TB的CREATE中做一些工作
oa.B.fb:='oa.b.fb';
oa.B.A :=ta.Create ;//这些CREATE可否不要,而在TA,TB的CREATE中做一些工作
oa.B.A.fa :='oa.B.A.fa';
oa.B.A.B:=tb.Create ;//这些CREATE可否不要,而在TA,TB的CREATE中做一些工作
oa.B.A.B.fb:='oa.B.A.B.fb';
ob :=tb.Create ;//只要这两处的CREATE
ob.fb :='ob.fb';
ob.A:=ta.Create ;//这些CREATE可否不要,而在TA,TB的CREATE中做一些工作
ob.A.fa :='ob.a.fa';
end;
 
可以, 不过要限制建立的层数
type
TA = class
// forward declaration
TB = class
fb:string;
A: TA;
constructor Create(s: string
cnt: Integer);
destructor Destroy
override;
end;
TA = class // defining declaration
fa:string;
B: TB;
constructor Create(s: string
cnt: Integer);
destructor Destroy
override;
end;
....

constructor TA.Create(s: string
cnt: Integer);
begin
fa := s+'.fa';
b := tb.create(s+'.b', cnt-1);
end;

....

constructor TB.Create(s: string
cnt: Integer);
begin
fb := s+'.fb';
if cnt > 0 then
a := ta.create(s+'.a', cnt-1);
end;

....


procedure TForm1.FormCreate(Sender: TObject);
begin
oa := ta.create('oa', 2);
ob := tb.create('ob', 1);
end;
 
最初我忘了,近读OPLG,有如下描述:
A class-type value is stored as a 32-bit pointer to an instance of the class
thanks.
 

Similar threads

S
回复
0
查看
955
SUNSTONE的Delphi笔记
S
S
回复
0
查看
776
SUNSTONE的Delphi笔记
S
I
回复
0
查看
394
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部