正在阅读:三谈多态—善用virtual三谈多态—善用virtual

2004-02-14 09:34 出处:PConline 作者:Nicrosoft 责任编辑:zwg
在该派生类中,有一个私有成员,即TMemo控件的实例。然后覆盖(override)了基类的两个抽象虚方法:DoLoad和Save。      其实现如下:   function TMemoEditor.Create();   begin    // 创建TMemo实例 m_Editor := TMemo.Create(nil);    // 接着完成将TMemo实例置于界面上显示出来等操作,省略 end;      function TMemoEditor.Destroy();   begin    // 其他清理工作       m_Editor.Free();    m_Editor := nil;   end;      function TMemoEditor.DoLoad(FileName : String) : Boolean;   begin Result := false; try    m_Editor.LoadFromFile(FileName);   except end;    Result := true;   end;      function TMemoEditor.SaveAs(FileName : String) : Boolean;   begin    Result := false;    try    m_Editor.SaveToFile(FileName);    except end;    Result := true; end;      很好,这样的实现已经可以使个部分运作正常了。如果,今后找到更好的编辑器控件,只需要从TEditor派生,再实现一个TXXXEditor类即可,其他部分的代码不用作任何改动。而且,具体实现的TXXXEditor类中的代码,只和具体控件本身特性相关(如:读取、保存文件的方法),而公共逻辑也已经在TEditor类中实现了。      virtual的使用方法,基于笔者个人认识与经验:      1、如果基类不知道如何实现某方法(只有派生类知道),而基类的其他方法又必须使用该方法,则把该方法声明为抽象虚方法—— virtual; abstract;(即C++的纯虚函数)。      2、如果基类能够为某方法提供一种默认实现,但派生类可能完全重写这个实现,则将该方法声明为虚方法—— virtual;并实现默认算法。   3、如果基类能够且必须提供某方法的部分的实现,而派生类必须提供另一部份的实现,则将该方法声明为非虚方法,并在基类中为其配套提供一个虚方法或抽象虚方法,以允许由基类本身调用和被派生类覆盖。犹如上例中的Load与DoLoad。      善用virtual,善用多态,你的代码将更具灵活性!
键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品