Virtual和override的区别

 我来答
匿名用户
2013-05-07
展开全部
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。
匿名用户
2013-05-07
展开全部
重载函数:
(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关键字必须有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式