大概內容如下:
TBase=class
procedure v1;virtual;
procedure v2;virtual;
procedure v3;virtual;
end;
TDerived=class(TBase)
procedure v2;override;
end;
則其VMT為:
TBase:
v1
v2
v3TDerived:
v1
TDerived.v2
v3
這樣的話TBase的v2不是被覆蓋勒,徹底找不到勒嗎?
我一直以為是這樣的:
TDerived:
v1
TBase.v2
v3
TDerived.v2
對delphi的override一直不太懂,請指點一下。
TBase=class
procedure v1;virtual;
procedure v2;virtual;
procedure v3;virtual;
end;
TDerived=class(TBase)
procedure v2;override;
end;
則其VMT為:
TBase:
v1
v2
v3TDerived:
v1
TDerived.v2
v3
這樣的話TBase的v2不是被覆蓋勒,徹底找不到勒嗎?
我一直以為是這樣的:
TDerived:
v1
TBase.v2
v3
TDerived.v2
對delphi的override一直不太懂,請指點一下。
procedure TDerived.hi;//子类覆盖
begin
inherited;
showmessage('hihi');
end;procedure TBase.hi;//父类声明的虚方法
begin
showmessage('hi');
end;然后你创建子类对象,并调用hi这个方法,由于用了inherited,就可以看到它先是调用父类的hi方法,然后才执行showmessage('hihi');不用inherited的话,就完全覆盖了
另外,<Delphi高手突破>也是非常OK的!
楼上的说的对.inherited后面如果不加方法名的话,就是调用父类的同名方法,如果加方法名则可以调用父类的任何方法,当然在有权限的情况下!