哪种情况下要用重载和虚拟方法?请举个例子出来,谢谢大家!

解决方案 »

  1.   

    哪种情况下要用重载和虚拟方法?请举个例子出来,谢谢大家!
    ----------------------------------------------
    1、一般在同一个类中或同一个单元中,存在函数名相同而函数的参数个数或类型不一样,就需要使用重载的方法;例如:
      A、同一个单元中存在一下2个函数:
         function CalcValue(iParm: integer): integer;
        function CalcValue(dParm: double): double;2、虚拟方法是可以被子类覆盖的,如果许多子类都拥有同样的方法,就可以在父类中使用虚拟的方法,这样不同的子类就都可以继承并覆盖这个方法了,例如在父类可以这样声明:
       function GetUserID: string; virtual;   在其子类中可以这样使用:
       function GetUserID: string; override;
      

  2.   

    该说我1楼都说了,给你起个简单的例子吧:比如你要实现的个画图的功能,各种图型,如三角型,圆型,四边型等都是对象,它们都继承自同一祖先。因为每个对象都需要一个画的动作(方法),这样你就可以在祖先里加一个Draw的虚拟方法,比如:
      procedure Draw(Canvas:TCanvas);virtual;
    然后每个子类都override这个方法,实现各自的画动作。这样使用的时候,只要调祖先的这个方法就可以把各自的图型画出来,而不用管是哪个具体的子类
      

  3.   

    重载是在某一类中或者单元中相同的函数名不同参数,需要用关键字overloadfunction sum(i:integer;j:integer):integer;overload;function sum(i:double;j:double):double;overload;