1、重载
以下条件要全部满足:
- 函数名相同
以下条件满足其1:
- 函数形参数目不同
- 函数形参类型不同
注意:
- 不看返回值
- 调用形式要不同
-
//下面两个函数不能重载 fun(int a,int b){} fun(int a,int b,int c=0){} //原因:调用fun(1,2)时,以上两个函数都符合调用条件,系统不知道该调用哪个了
-
- 类内函数可用const区分重载
-
//以下两个函数可在类内重载 void fun(int a,int b)const{} void fun(int a,int b){} //类外呢?下面的函数在类外定义,会报错 void fun(int a,int b)const{} //non-member function 'void fun(int, int)' cannot have cv-qualifier
-
2、隐藏
在类的继承中,派生类和基类含有同名函数
判断条件:
- 函数名相同
- 派生类中的同名函数会隐藏基类中的同名函数及其所有的重载形式
注意:
- 其他的不管
3、覆盖
在类的继承中,派生类中的虚函数覆盖了基类中的虚函数
以下条件要全部满足:
- 函数名称相同
- 函数形参类型相同
- 函数形参数目相同
- const也是区分条件。两函数应均为常函数或均不为常函数。
- 函数返回值相同,或函数返回值满足类型兼容性规则
注意:
- 一般在派生类函数中也使用virtual,增强程序可读性(当然不写也行)
- 使用override表示重写虚函数,以便在编译阶段发现错误。(错误:两函数不满足覆盖条件,即函数参数不一致)