类的继承,为什么调用父类的父类的过程不能运行呢 ( 积分: 100 )

  • 主题发起人 主题发起人 wsp_731
  • 开始时间 开始时间
W

wsp_731

Unregistered / Unconfirmed
GUEST, unregistred user!
Ttest1 =class
procedure showm1;
end;

Ttest2 = class
Test1:TTest1;
procedure showm2;
end;

Ttest3= class
Test2:TTest2;
end;
M:=test3.create;
为什么m.test2.showm2;运行正常
但是 m.test2.test1.showm1;能够编译通过,但是运行的时候出错
 
Ttest1 =class
procedure showm1;
end;

Ttest2 = class
Test1:TTest1;
procedure showm2;
end;

Ttest3= class
Test2:TTest2;
end;
M:=test3.create;
为什么m.test2.showm2;运行正常
但是 m.test2.test1.showm1;能够编译通过,但是运行的时候出错
 
你的Test1没有实例化吧?
得在Ttest2 的构造函数中把Test1实例化即Test1:=TTest1.create();
 
应该声明在PUBLIC里面吧 把showm1
这好象不叫父类吧 因为没有继承
 
我构造过构造函数 ,实例化过了,也是不好用呀
 
首先 这不是继承, 所以不能叫 “父类”
这该叫类引用吧。

其次 如果类的字段有类变量(对象), 那么最好在create时创建他们,在destroy时释放它们。否则后果可能很严重。

最后, 你的代码出现的错误,我认为是, test2的show2 可以作为一个静态方法调用,因为它没有使用任何ttest2的内部成员, 应该如同调用Ttest2.show2; 但是你要调用Ttest2的字段test1,那么必须先实例化它, 否则这是不容许它的。

下面是我修改的正确代码:

Ttest1 =class
procedure showm1;
end;

Ttest2 = class
Test1:TTest1;
procedure showm2;
end;

Ttest3= class
test1:Ttest1;
Test2:TTest2;
constructor Create;
destructor destroy; override;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ Ttest1 }

procedure Ttest1.showm1;
begin
showmessage('test 1')
end;

{ Ttest2 }

procedure Ttest2.showm2;
begin
showmessage('test 2')
end;

procedure TForm1.Button1Click(Sender: TObject);
var
m: Ttest3;
begin
m:= Ttest3.Create;
try
m.Test2.Test1.showm1;
finally
m.Free;
end;
end;

{ Ttest3 }

constructor Ttest3.Create;
begin
Test2:= Ttest2.Create;
end;

destructor Ttest3.destroy;
begin
if test2 <> nil then
FreeAndNil(test2);
inherited;
end;

end.

希望指出不当的地方。 洗耳恭听。
 
还是没有在test2的构造函数中实例化test1
 
duhai_lee
你好,非常感谢你的回复,希望能够认识你,嗬嗬,我的qq 41979259
然后针对你的回答,暂时有一点不太明白,再delphi中,好像他所引用的所有的类对象都没有在create中生成呀!我也感觉是实例化的问题,但是你的回复现在没有时间好好看,等晚上吧,呵呵
 
还有就是为什么m.test2.showm2;运行正常
但是 m.test2.test1.showm1;能够编译通过,但是运行的时候出错
同样的都没有实例化呀
而duhai_lee的解答中把test3中的test2实例化则可以正常运行,但是我原来的程序在test3中没有实例化test2但是m.test2.showm2同样能够运行亚
 
赞成duhai_lee的做法
重建构造函数和坼构函数
 
多次引用的话上引用的类方法一定要是同一单元或者是公共方法!
 
继承是这样的:
Ttest1 =class
procedure showm1;
end;

Ttest2 = class(TTest1)
procedure showm2;
end;

Ttest3= class(TTest2)
end;
 
类引用。。。。。。。。

类啊。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
437
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部