C++学习(二):函数重载和引用

一:重载

一:定义:

函数重载 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.如果函数返回时,出了函数作用域,返回对象还在(还没还给系统),则可以使用引用返回,否则必须使用传值返回。

感谢你看到这,大家共同进步!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值