码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:style   ar   cti   on   c   ef   r   bs   tt   

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;

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

标签:style   ar   cti   on   c   ef   r   bs   tt   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!