C++重写和重载的区别

 我来答
文亮无云
游戏玩家

2020-03-05 · 游戏我都懂点儿,问我就对了
知道大有可为答主
回答量:1.2万
采纳率:25%
帮助的人:907万
展开全部
一、重载(overload)
指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。
(1)相同的范围(在同一个作用域中)

(2)函数名字相同;
(3)参数不同;
(4)virtual
关键字可有可无。
(5)返回值可以不同;
二、重写(也称为覆盖
override)
是指派生类重新定义基类的虚函数,特征是:
(1)不在同一个作用域(分别位于派生类与基类)

(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有
virtual
关键字,不能有
static

(5)返回值相同(或是协变),否则报错;<—-协变这个概念我也是第一次才知道…
(6)重写函数的访问修饰符可以不同。尽管
virtual

private
的,派生类中重写改写为
public,protected
也是可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伍松兰邹娟
2020-03-01 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:30%
帮助的人:966万
展开全部
重载是相同函数名,但函数的参数不能完全相同。例如:
int
f();
int
f(int
a);
这是重载。
重写是子类的函数实现覆盖了父类的函数实现,函数名和参数都要相同。例如:
class
base{
void
f(){cout
<<
"base::f()"
<<
endl;}
}
class
derive:public
base{
}
这种情况下通过子类对象调用f()函数就是使用的父类的函数
derive
d;
d.f();
会输出
base::f()

class
base{
void
f(){cout
<<
"base::f()"
<<
endl;}
}
class
derive:public
base{
void
f(){cout
<<
"deive::f()"
<<
endl;}
}
这种情况下通过子类对象调用f()函数就是使用的自己的函数
derive
d;
d.f();
会输出
derive::f()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式