如何调用父类的虚方法(38分)

  • 主题发起人 主题发起人 autumn
  • 开始时间 开始时间
A

autumn

Unregistered / Unconfirmed
GUEST, unregistred user!
type
a=class
procedure f;virtual;
end;
a1=class(a)
procedure iwant;
procedure f;override;
end;

procedure a.f;
begin
showmessage('a');
end;

procedure a1.f;
begin
showmessage('a1');
end;

procedure a1.iwant;
begin
//这里要调用a.f;如何实现
end;
 
现在我用的很笨的方法:
type
a=class
procedure f;virtual;
procedure fbak;//修改后的
end;
a1=class(a)
procedure iwant;
procedure f;override;
end;

procedure a.f;
begin
showmessage('a');
end;

procedure a.fbak;
begin
//这里和a.f一样的代码
end;

procedure a1.f;
begin
showmessage('a1');
end;

procedure a1.iwant;
begin
//这里要调用a.f;如何实现

//笨奔的调用
fbak;
//谁有好的法子?
end;


 
我记得有一个指示符放在后面就可以了,但我现在想不起来,我回去给你查书吧。
 
好象只要用inherited指示一下就可以了.

调用:

procedure a1.f;
begin
inherited f;
end;

如果是其他函数中调用, 可以加一个parent:tobject变量,
然后用:
a(a1a.parent).f 来调用, 其中a1a是a1的实例, 在a1.iwant中只要写:
a(parent).f就可以了


不过一般好象不直接调用父对象的虚方法的.
 
子类中inherited就可以了,就像上面写的!
要用就调用子类的!
 
IKnow:
a(a1a.parent).f好像a1a没有parent的属性(a1a inherited tobject)
怎样才有parent的属性可以调用
 
我觉得比较“正式”的方法应该就是autumn那样,只是改一下:

procedure a.fbak;
begin
f;
end;

再在派生类中调用a.f即可
用inherited没有用,因为inherited只能在重载的方法中调用,其它的方法中不行
用parent:tobject应该也不行,因为在类定义中,tobject还没有建立
而且这好象和Parent无关吧?
在运行期直接用a(a1object).f试试看?
或者
aobject := a1object;
aobject.f;
 
多人接受答案了。
 
后退
顶部