C++重写和重载的区别
2个回答
展开全部
一、重载(overload)
指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。
(1)相同的范围(在同一个作用域中)
;
(2)函数名字相同;
(3)参数不同;
(4)virtual
关键字可有可无。
(5)返回值可以不同;
二、重写(也称为覆盖
override)
是指派生类重新定义基类的虚函数,特征是:
(1)不在同一个作用域(分别位于派生类与基类)
;
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有
virtual
关键字,不能有
static
。
(5)返回值相同(或是协变),否则报错;<—-协变这个概念我也是第一次才知道…
(6)重写函数的访问修饰符可以不同。尽管
virtual
是
private
的,派生类中重写改写为
public,protected
也是可以的
指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。
(1)相同的范围(在同一个作用域中)
;
(2)函数名字相同;
(3)参数不同;
(4)virtual
关键字可有可无。
(5)返回值可以不同;
二、重写(也称为覆盖
override)
是指派生类重新定义基类的虚函数,特征是:
(1)不在同一个作用域(分别位于派生类与基类)
;
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有
virtual
关键字,不能有
static
。
(5)返回值相同(或是协变),否则报错;<—-协变这个概念我也是第一次才知道…
(6)重写函数的访问修饰符可以不同。尽管
virtual
是
private
的,派生类中重写改写为
public,protected
也是可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
重载是相同函数名,但函数的参数不能完全相同。例如:
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()
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()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询