-
函数重载
函数名相同,作用域相同,参数列表不同,不能靠返回值类型区别是否重载,const成员函数可以构成重载,因为this指针作为默认的参数,对const和非const成员函数是不同的。不靠virtual区分。
class …
{
virtual int fun();
void fun(int);
void fun(int)const;
int fun(double);
}; -
函数覆盖
类之间继承关系之间,派生类覆盖基类同名函数,基类必须是虚函数,派生类中同名函数可虚可不虚,但参数列表要相同,而且有相同的返回类型。
class Base
{
public:
virtual void fun(){}
};
class Derived:public Base
{
public:
void fun();
};重载与覆盖的区别:
覆盖是子类与父类之间的关系,是一种垂直关系。
重载是同一个类中不同方法之间的关系,是一种水平关系。
覆盖要求参数列表相同,重载则要求不同。
覆盖要求返回类型相同,重载不要求。 -
函数隐藏
类之间继承关系之间,派生类中函数隐藏了基类同名函数。无论基类是否有虚函数,只要函数参数不同,基类同名函数都会被隐藏,与重载的区别是两个函数是否在一个类中。或者函数参数相同,但是基类函数不能为虚函数,与覆盖的区别是基类有无虚函数。
class Base
{
public:
virtual void fun(){}
void fun1();
};
class Derived:public Base
{
public:
void fun(int);
void fun1();
};
重载、覆盖与隐藏区别
最新推荐文章于 2022-12-20 00:25:38 发布