C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,即函数的参数列表不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。
引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
引用的声明方法:类型标识符 &引用名=目标变量名;例如:
int &c = a;
这里先以一段程序来简单说明一下函数重载,如下:
#include <iostream>
using namespace std;
/* 重载:根据形参不同调用不同的函数 */
/* 两个形参类型都为int */
int add(int a, int b)
{
cout<<"add int+int"<<endl;
return a+b;
}
/* 三个形参类型都为int */
double add(int a, int b, int c)
{
cout<<"add int+int+int"<<endl;
return a+b;
}
/* 两个形参类型都为double */
double add(double a, double b)
{
cout<<"add double+double"<<endl;
return a+b;
}
/* 形参类型为一个int,一个double */
double add(int a, double b)
{
cout<<"add int+double"<<endl;
return (double)a+b;
}
/* 形参类型为一个double,一个int */
double add(double b, int a)
{
cout<<"add double+int"<<endl;
return (double)a+b;
}
int main(int argc, char **argv)
{
/* 这里的函数调用会根据传入不同类型的实参从而调用上面不同的函数,这就是重载 */
add(1, 2);
add(1, 2, 3);
add(1.0, 2.0);
add(1, 2.0);
add(1.0, 2);
return 0;
}
代码的输出结果如下:
下面的代码是一个引用和指针的应用,代码都做了详细的注解:
#include <iostream>
using namespace std;
int add_one(int a)
{
a = a+1;
return a;
}
/* 指针调用 */
int add_one(int *a)
{
*a = *a + 1;
return *a;
}
/* 引用:和赋值者占用同一块内存空间 */
/* 引用符:& */
int add_one_ref(int &b)
{
b = b+1;
return b;
}
int main(int argc, char **argv)
{
int a = 99;
int &c = a;//引用的初始化必须赋值
/* 这里的输出结果是100,由函数返回值决定 */
cout<<"a = "<<add_one(a)<<endl;
/* 这里的输出结果是99,上面函数只是把a的"值"传过去,所以a本身不会发生变化 */
cout<<"a = "<< a << endl;
/* 这里的输出结果是100,这里传递的是a的"地址",所以修改后a会发生变化 */
cout<<"a = "<<add_one(&a)<<endl;
cout<<"a = "<< a << endl;
/* 这里的输出结果是101,这里将a赋给了"引用"的变量,所以修改后a会发生变化 */
cout<<"a = "<<add_one_ref(a)<<endl;
cout<<"a = "<< a << endl;
/* c 是 a 的引用,a的值已经为101了,所以这里 c 值递增后为102,a 的值和 c 一样也为102 */
c++;
cout<<"a = "<< a << endl;
cout<<"c = "<< c << endl;
return 0;
}
程序运行后的结果如下: