1.重载 指针 引用
1.1 重载
函数名都是一样的,但是参数是不一样的,调用同一个函数名的函数。
#include <iostream>
using namespace std;
int add(int a, int b)
{
cout<<"add int+int"<<endl;
return a+b;
}
int add(int a, int b, int c)
{
cout<<"add int+int+int"<<endl;
return a+b+c;
}
double add(double a, double b)
{
cout<<"add double+double"<<endl;
return a+b;
}
double add(int a, double b)
{
cout<<"add int+double"<<endl;
return (double)a+b;
}
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;
}
当我执行
add(1, 2);
add(1, 2, 3);
add(1.0, 2.0);
add(1, 2.0);
add(1.0, 2);
的时候,传入的参数是
int,int
,那么我的编译器是选择第一个函数,还是第二个函数。所以只能通过参数的不一样去重载函数,不能通过函数返回值的不一样去重载函数
1.2 指针与引用
#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;
cout<<add_one(a)<<endl;
cout<<"a = "<<a<<endl;
cout<<add_one(&a)<<endl;
cout<<"a = "<<a<<endl;
cout<<add_one_ref(a)<<endl;//和第一个一样,为什么
cout<<"a = "<<a<<endl;
c++;
cout<<"a = "<<a<<endl;
cout<<"c = "<<c<<endl;
return 0;
}
第一幅图,正常使用函数以及调用指针两者的区别。
第二,第三幅图是指引用的效果。b被a引用以后,b也就指向了a。
注意: 引用是如下所示,
int &b=a;
赋值的时候是变量,不能够是常数。
int &b=1;//这个是错的