1.4 C++基础知识_重载_指针_引用

本文探讨了C++中的函数重载概念,包括通过参数类型、数量和顺序来区分同名函数,并强调返回值类型不能作为区分依据。同时介绍了指针的基本用法,展示如何通过指针修改外部变量的值。最后,讲解了引用的特性,作为已有变量的别名,使得在函数中直接修改引用所对应的变量值。
摘要由CSDN通过智能技术生成

本节讨论重载,指针,引用。

重载

所谓重载,就是函数名相同,参数不同(类型,数量,顺序不同)

也就是说,C++允许多个函数拥有相同的函数名,通过函数参数来区分调用的是哪个函数。

参数类型不同

如下图所示,创建了两个名字相同,但是传入的参数类型不同的函数add_a_b。

在main函数中调用add_a_b,首先传入的是int类型的参数,然后是char类型的参数,看看编译器是否可以区分调用的是哪个函数。

执行结果如下,程序先进入了传入int类型的add_a_b函数,然后进入了传入char类型的add_a_b函数。

也就是说,编译器通过传入的参数类型不同,调用了不同的函数。

数量不同

函数名相同,参数数量不同,编译器也能区分调用不同的函数。

创建一个传入三个char类型的参数的函数,看看编译器是否可以区分。

编译结果符合预期,编译器可以根据参数的数量,识别调用不同的函数。

顺序不同

新增两个测试函数,将它们的传参的类型顺序颠倒,一个传入(int,char)类型的参数,另一个传入(char, int)类型的参数,看看编译器能否识别。

测试结果如下,先调用了传入(int,char)类型的函数,然后调用了传入(char,int)类型的函数。

也就是说,编译器可以根据传入参数的顺序不同,调用不同的函数。

返回值类型不同

问:还有一个问题,就是如果传入的参数相同仅返回值不同,那么编译器可以区分调用的是哪个函数吗?

可以测试一下,测试程序如下图所示。

定义了两个传参相同,但是返回的类型不同的函数,测试编译器是否可以区分。

此时,编译会报错,编译器不知道要调用哪个函数,是第3行的add_a_b函数,还是第9行的add_a_b函数。

也就是说,编译器不能根据返回参数的不同,区分调用不同的函数

小结

通过上面的测试,可以看出,C++编译器在处理相同函数名的函数调用时,可以通过:

  1. 传入参数的类型;
  2. 传入参数的数量;
  3. 传入参数的顺序;

三者,实现区分调用的函数。

但是,不能根据返回值的类型来区分调用哪个函数。

指针

C++的指针C语言的指针基本相同,使用也基本一致,都是记录变量的地址

如下图,由于使用的是值传递,所以调用 add_one函数 后,main 中的 a 变量的值不会增加,还是99。

 

要想 a 的值同步修改,可以使用指针,修改后的程序如下。

此时,通过 add_one 函数,main 中的变量 a 实现了加一。

总结

C/C++的指针基本是一致,就不做过多的解读了。

引用

不使用指针,但是还是想要在函数中修改外部参数的值,那么可以使用引用。

引用,相当于给已经存在的变量起一个别名,之后对这个引用的操作,就相当于对原变量进行操作。

需要注意的是,引用使用的是 & 符号。

修改代码,增加一个add_one_ref函数,传参一个引用,传入变量 a。

编译测试,发现 a 的值确实被修改了。

再简单的说明一下引用。

下面的代码,首先创建了一个变量 a,然后将 b 设为 a 的引用。

这样,b 就是 a 的引用,之后所有对 b 进行的操作,就会同步到 a。

int a = 100;

int &b = a;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值