一:重载
一:定义:
函数重载 C++ 允许在 同一作用域中 声明几个功能类似 的同名函数 ,这些函数的形参列表 ( 参数个数 或 类型 或 类型顺序 ) 不同 ,常用来处理实现功能类似数据类型不同的问题。
void add(int a, int b) {
cout << a+b << endl;
}
void add(int a, double b) {
cout<< a+b<<endl;
}
void add(double a, int b) {
cout << a+b << endl;
}
void add(int a, int b, int c) {
cout << a+b+c << endl;
}
二:为何c++允许函数重名
c语言编译时无法区分同名函数,c++编译时将函数名修饰了一下所以可以区分。参数不同,修饰出来的函数就不同,编译就可以区分了。
注意:如果函数同名且参数相同,但是返回值不同,无法构成重载
二:引用
一:定义
引用
是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。类型
&
引用变量名
(
对象名
) =
引用实体;
int main() {
int a = 10;
int& b = a;
cout << a << " " << b<<endl;
printf("%p\n", a);
printf("%p", b);
return 0;
}
运行一下就发现地址是一样的
二:特性
1. 引用在 定义时必须初始化2. 一个变量可以有多个引用3. 引用只能引用一个实体
int main() {
//int& a;不行 必须初始化
int a = 10;
int& b = a;
int& c = b;
cout << a << " " << b <<" " << c<< endl;
printf("%p\n", a);
printf("%p\n", b);
printf("%p\n", c);
return 0;
}
三:常引用
引用权限只能缩小或平移,不能放大
int a = 10;
const int& b = a; //权限缩小
//const int r = 10;
//int& c = r;//权限放大 不行
const int u = 10;
const int& d = u;//权限平移
四:使用场景(做参数和返回值)
void swap(int&a,int&b){ //引用做参数 这里就可以不用指针了 这里改变就可以影响实参了
int tmp=a;
a=b;
b=tmp;
}
struct st {
int a[1000] = {0};
int size;
};
int& top(struct st& s) {
return s.a[0];
}
int main() {
st p;
int& a = top(p);
//int b = top(p); 这是传值 虽然值一样 最好用引用
cout << a << endl;
cout << top(p) << endl; //这是计算机自动用引用
return 0;
}
注意:
1.用值作为参数或者返回值类型,效 率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。
2.如果函数返回时,出了函数作用域,返回对象还在(还没还给系统),则可以使用引用返回,否则必须使用传值返回。
感谢你看到这,大家共同进步!