栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

1.4 C++基础知识

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1.4 C++基础知识

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

重载

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

也就是说,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;

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950094.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号