函数重载:
在C++中可以定义重名函数,重名函数可以进行函数重载,使同一个函数能够应付多种情况。
#include <iostream>
using namespace std;
int maxinum(int a, int b, int c){
int d;
if(a > b){
d = a;
}else{
d = b;
}
return c > d ? c : d;
}
double maxinum(double a, double b, double c){
double d;
if(a > b){
d = a;
}else{
d = b;
}
return c > d ? c : d;
}
char maxinum(char a, char b, char c){
char d;
if(a > b){
d = a;
}else{
d = b;
}
return c > d ? c : d;
}
上述代码重载的最大值函数。
默认参数值
C++允许在函数中定义默认参数值,即调用函数时没有明确定义部分参数值是会用默认参数替代。
注意:默认参数值只能从右往左定义,不能跳过几个参数不定义。
#include <iostream>
using namespace std;
class Cmytime{
private:
int hour, min, sec;
public:
Cmytime(int h = 0, int m = 0, int s = 0){
hour = h;
min = m;
sec = s;
}
void Set(int h, int m, int s){
hour = h;
min = m;
sec = s;
}
void Show(){
cout << hour << ":" << min << ":" << sec;
}
};
上述代码中重载的类的构造函数
默认函数导致的歧义性:
如上图所示,编译器报错,因为不给参数调用默认函数编译器不知道执行哪一个,应该要把其中一个注释掉。
引用
引用类似与取别名,并用一个新的计算器复制值而是直接引用原来的寄存器。
引用是对指针的进一步简化,如下述代码所述,使用引用显然比指针更好理解,也更简便,但都可以达到同样的效果。
C++中的多态是什么
C++中的多态是指同一个接口或操作在不同的情况下执行的情况不同。
常引用保护
上述的代码会报错,因为这里有一个常引用只读保护,而函数内部修改了这个应引用,因此代码会报错。
操作符重载
操作符重载本质上是函数重载,使操作符具备更多场景的使用功能
一下是一个操作符重载的实例:
但操作符重载仍有一下两点限制:
- 无法修改原操作符的操作数个数,如+重载后仍有两个操作数,++重载后只有一个操作数
- 无法修改操作符的优先级关系,如会先算*后算+
函数重载在类中声明:
函数重载可以只在类中声明,但在类外实现
如上图所示:-的重载在类中声明,但在类外实现,值得注意的是在类外实现时在运算符前要加上重载运算符所在的类
在类外实现成员函数是一个更好的习惯,因外这样有利于团队的分工(有专人负责设计类的架构)