一、overload(重载)
overload在同一作用域内,函数名相同,参数列表不同。
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同(包括参数类型、个数、顺序);
(4)virtual 关键字可有可无。
class a
{
public:
int func(int a,int b);
int func(int a,double b);
};
二、override(覆写)
override在父子类之间,函数名、参数列表、返回值都必须相同,且父类函数前必须加virtual关键字,子类函数前可加可不加。
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
(5)返回值必须相同(例外:函数参数相同,返回值是当前对象的指针或引用时,也可设为虚函数,构成覆写)
class a
{
public:
virtual int func();
};
class b:public a
{
public:
virtual int func();
};
三、shadow (覆盖)
shadow在父子类之间,函数名相同,参数列表可相同也可不同。
1. 如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与overload(重载)混淆)。
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数不同(包括参数类型、个数、顺序);
(4)virtual 关键字可有可无。
class a
{
public:
int func(int a,int b);
};
class b:public a
{
public:
int func(int a,double b);
};
2.如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与override(覆写) 混淆)。
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数没有virtual 关键字。
class a
{
public:
int func();
};
class b:public a
{
public:
int func();
};
357

被折叠的 条评论
为什么被折叠?



