首页 > 其他 > 详细

虚函数的特点就是执行的时候会下降到子类去执行同名覆盖函数

时间:2014-09-14 05:47:26      阅读:285      评论:0      收藏:0      [点我收藏+]

var
t: TBitBtn;
begin
t:=TBitBtn.Create(nil);
t.Name:=‘BitBtn100‘;
t.parent :=Self; // 这里下断点
end;

一路跟踪就会发现以下函数执行的时候下降(执行子类覆盖函数):

TBitBtn.CreateHandle;
TButton.CreateWnd;
TBitBtn.CreateParams

但是子类也不会放弃父类已经提供的功能,全都是在父类函数执行前或者执行后的结果上增加一小部分特性,形成三明治风格。

干脆,我们看看TBitBtn增加些什么东西:

procedure TBitBtn.CreateHandle;
var
State: TButtonState;
begin
if Enabled then // 增加按钮的状态
State := bsUp
else
State := bsDisabled;
inherited CreateHandle;
TButtonGlyph(FGlyph).CreateButtonGlyph(State); // 增加按钮的图像
end;

procedure TButton.CreateWnd;
begin
inherited CreateWnd;
FActive := FDefault; // 增加判断是否处于激活状态
end;

procedure TBitBtn.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do Style := Style or BS_OWNERDRAW; // 增加自绘状态
end;

虚函数的特点就是执行的时候会下降到子类去执行同名覆盖函数

原文:http://www.cnblogs.com/findumars/p/3970630.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!