永发信息网

Virtual和override的区别

答案:5  悬赏:0  手机版
解决时间 2021-02-24 22:48
  • 提问者网友:自食苦果
  • 2021-02-24 13:37
Virtual和override的区别
最佳答案
  • 五星知识达人网友:纵马山川剑自提
  • 2021-02-24 15:01
override是对父类的覆盖或者重载,也就是说父类肯定有定义这个函数,或者有同名的重载函数。

virtual是在父类肯定有进行申明,但是函数是没有本体的。相当于一个接口允许子类进行同名化也是方便子类函数的继承更方便!~两个不同定义的子类可以通过同一个过程调用不同的函数,一般都是通过Virtual来定义的!~

例如 var a :array [0..1] of stream;

a[0]:=TMemoryStream.Create;
a[1]:=TStringStream.Create;
for i:=0 to 1 do
a[i].clear;
最后这个clear就是通过Stream的Vitrual来调用的,可以用同一个函数名,但是它们的Clear的实际方法却是不同的,各自是 StringStream MemoryStream分别定义的。
全部回答
  • 1楼网友:迟山
  • 2021-02-24 17:27
争议重载函数: (1)参数不同的函数一定是不同的 (2)返回值不同的函数不一定是不同的例如: int Fun() ; void Fun() ; int x = Fun() ;//这个时候就不知道应该调用哪一个函数 区分是不是重载函数的标准: (1)只能靠函数的参数来区分重载函数 (2)不能靠函数的返回值来区分重载函数 编译之后的名字:_fun_int_int ;(C++中就是这样来区分重载函数的) 注意:并不是函数的名字相同就构成重载,当函数的作用域不同的时候两个重名的函数不能称作重载函数 例如:void print(int x, int y) ; class A { void print(int x) ;//这样不叫函数的重载,因为函数的作用域不同 }; 重载和覆盖的区别:(四个方面) (1)从作用范围来说 (2)函数名称来说 (3)函数参数来说 (4)有没有Virval关键字 《1》重载: (1)作用范围相同 (2)函数名称相同 (3)函数参数不相同 (4)Virtual关键字有没有都可以 《2》覆盖: (1)作用范围不相同(分别位于子类和父类) (2)函数名称相同 (3)函数参数相同 (4)Virtual关键字必须有
  • 2楼网友:狂恋
  • 2021-02-24 16:10
new关键字 1、用于创建对象。如:class1 o = new class1(); 2、用于向基类成员隐藏继承成员。如: public class basec { public int x; public void invoke() {} } public class derivedc : basec { new public void invoke() {} } virtual 关键字 用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。 例如,此方法可被任何继承它的类重写。 public virtual double area() { return x * y; } override关键字 指定属性或过程可由派生类中同名的属性或过程进行重写。 public override double area() { return x * y; }
  • 3楼网友:一叶十三刺
  • 2021-02-24 15:25
Virtusal 是虚方法啊,,,,Override这个是覆盖方法啊, 在虚方法中不能包括Overrde abstract static 等 修饰符 而在哪个覆盖的方法啊就可以,包括 new static virtual 还可以有 abstrasct
  • 4楼网友:像个废品
  • 2021-02-24 15:12
1、override表示以继承的父类方法 2、virtual(虚拟方法)和dynamic(动态方法)表示:后代类可以override祖先的同名方法,在override过程的实现里,还可以用inherited调用祖先的同名方法,virtual(虚拟方法)和dynamic(动态方法)两者的差异在于方法指针的保存,virtual方法使用VMT(Virtual Method Table),也就是说,每一个该类的后代类都拥有整个的VMT,其优点在于速度快,因为类的实例可以直接从VMT中找到该方法的入口,但它也耗用较多的内存;相对的dynamic方法则不使用VMT,如果类的后代没有override该方法,那么需要从它的父类去查找方法的入口,它的优点是少用内存,因为子类只保留它override的方法入口,缺点是速度较慢,尤其在多级继承的时候,可能需要前溯好多层才找到方法的。 3、一般的理解是,如果该方法其后代类基本都需要override的,使用virtual,如果该方法不经常在后代类中被override的,使用dynamic。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯