C++重载(overloading)和其它编程语言中的重载概念基本上是一致的。C++重载分为操作符重载与函数重载。
操作符重载
操作符重载使用关键字operator。
操作符重载能够使同一个操作符具有不同的操作含义,满足更广泛范围的操作需要。
例如,对于一个容器类MyList,你可以重载操作符+号,重载的含义是对两个MyList使用+执行相加,表示将两个MyList的内容合并到一起,等等。
后面学习中单独对操作符重载举例。
函数重载
函数重载都是为了能够共享同一个函数名称,而具有相同的函数名称的函数具有不同类型的参数,这些具有相同函数名称的函数就是通过重载而定义的。
一定要明确,重载的函数或者具有不同类型的形参,或者具有不同个数的形参。
例如,如果同时定义函数int getMax(int &x, int &y)与int getMax(int x, int y),这两个函数是不能够重载的,编译器无法辨认到底调用的是哪一个函数。
举个简单的例子:
#include <iostream>
#include <list>
using namespace std;
typedef list<int> LIST;
int get_max(LIST &list);
int get_max(int &x, int &y);
int main() {
LIST list;
list.push_back(12);
list.push_back(4);
list.push_back(8);
list.push_back(5);
cout<<get_max(list)<<endl;
int x = 120;
int y = 121;
cout<<get_max(x, y)<<endl;
return 0;
}
int get_max(LIST &list) {
int max = 0;
LIST::iterator it;
for(it = list.begin(); it != list.end(); it++) {
if(max<*it) {
max = *it;
}
}
return max;
}
int get_max(int &x, int &y) {
return x<y?y:x;
}
int getMax(int &x, int &y) {
return x<y?y:x;
}
其中,int getMax(LISTINT &list)和int getMax(int &x, int &y)是重载函数,他们具有相同的函数名称,但是具体有不同的参数个数,而且参数的类型是不同的,编译器可以分辨到底调用的是哪一个函数,因此是合法的。