您的位置:首页 > 其它

面向对象之路--静态方法-虚方法和动态方法

2007-03-14 22:22 465 查看
按照方法的绑定机制分:static,virtual,dynamic;后两种又叫abstract method.
在面向过程编程中,语言是早绑定的;
面向对象编程中,既可早绑定也可晚绑定,给程序员很大的灵活性.

tMyclass=class

procedure iAmStatic;//静态
procedure iAmVirtual;//虚方法
procedure iAmDynamic;//动态方法
procedure iAmVirtualAbstract;Virtual;Abstract;//虚抽象方法

end;

=========
type
tcomputer=class
procedure starting;
end;
tnotebookPc=class(tcomputer)
procedure starting;
end;

var
computer=Tcomputer;
notebookPc=tmotebookpc ;
begin
computer:=tcomputer.create;
computer.starting; //调用的是tcomputer.starting
computer.destroy;
computer:=tnotebookpc.create;//引用的该类的对象,但他声明的是tcomputer;
computer.starting;// 调用的是tcomputer.starting;
tnotebookpc(computer).starting;//调用的是tnotebookpc
computer.Destroy;
notebookpc:=tnotebookpc.create;
notebookpc.starting; //调用的是tnotebookpc
notebookpc.destroy;
end;

静态方法就象通常的过程和函数那样调用.当调用一个静态方法时.类或对象所声明的类型决定了哪种方法被执行.编译器知道这些方法的地址.执行速度最快,但不能被覆盖,不支持多态性.
虚方法和动态方法能在派生类中被覆盖,调用时由类或对象的实际类型决定哪种实现被调用,而不是他们声明的类型.一切都发生在运行时
虚方法------>由VMT(包含祖先类的虚方法和本对象的虚方法)调度;内存使用比动态方法多,但执行速度较快;
动态方法(编译器指定一个唯一的编号no.)-----no.--->DMT(包含该对象的动态方法和祖先类的DMT),通过祖先DMT访问祖先其余的动态方法.使用内存比虚方法少,但执行速度慢.

type
tcomputer=class
procedure starting;virtual;
end;
tnotebookPc=class(tcomputer)
procedure starting;override;
end;
tPC=class(tcomputer);
procedure starting;override;
end;

....
...
var
computer:tcomputer;
begin
computer:=tnotebookpc.create;
computer.starting; //diaoyong tnotebookpc.starting;
computer.destroy;
computer:=tPC.create;
computer.starting; //diaoy调用的是tpc.starting;
computer.destroy;
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐