这一讲是承接《 C++基础精讲篇第1讲》的内容补充之一。读者们可以先把上一讲的知识学习了以后,再学习这一讲的相关知识。这一讲主要为大家分享C++特有的函数重载和引用这两个重要的概念,这是深入学习C++必须掌握的知识点,希望大家在我的文章的帮助下,能有所收获,那我们就开始学习吧。
目录
1、函数重载
1.1概念
函数重载是函数的一种特殊情况的,C++中允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,其常用来处理实现功能类似数据类型不同的问题。
1.2 案例分析
以下面代码为例分析,函数名相同,但形参列表不同,我们依然可以实现同名调用,而在C语言中,是不允许函数名相同的,这就是C++不同于C语言的地方之一,正因为有了函数重载概念,对我们开发者来说使用非常方便。
#include<iostream>
using namespace std;
//函数重载
//使用场景举例说明:这种函数同名使用在c语言中是不支持的,在c语言中需要用到不同的函数名,如:Swap_1;Swap_2
void Swap(int*p1, int*p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
void Swap(double*p1, double*p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main()
{
int a = 1, b = 2;
double c = 1.1, d = 2.2;
Swap(&a, &b);
Swap(&c, &d);
//其实在这里利用cout,自动识别类型,利用到了函数重载原理
cout << a << endl;
cout << b << endl;
return 0;
}
除了上面的例子以外,C++中的输入流和输出流其实也是函数重载的表现,因为在上一讲中我们提到过C++的输入流和输出流不用指定数据类型同样可以识别,其原理就是利用了函数重载。
之所以C++能够有函数重载,这是因为C++具有不同于C语言的函数名修饰规则,正因为该规则使得在同名函数的条件下,只要形参不同,开发者就可以使用同名函数进行操作,关于函数重载的详细介绍,推荐大家去看这篇博客,个人认为描述得很详细,看完就能基本明白是怎么一回事了
建议阅读的函数重载博客链接:C++的函数重载 - 吴秦 - 博客园 (cnblogs.com)
1.3 函数重载的使用注意事项
1、当同名函数中形参类型相同,然后不同的是交换了形参的顺序,这种是不被允许的,不属于函数重载;
2、函数名相同,内部形参顺序类型均相同,但返回值不同也不能构成函数重载,因为在调用时是无法区分的;
1.4 补充知识:extern"C"
在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern "C",意思是告诉编译器,将该函数按照C语言规则来编译。代码示意如下:
extern "C" int Add(int left, int right);
int main()
{
Add(1,2);
return 0;
}
2、引用
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。简而言之,引用的作用是对标指针的。
2.1 类型& 引用变量名(对象名)==引用实体
#include<iostream>
//引用,其作用是对标指针,简而言之就是给变量取别名
using namespace std;
int main()
{
int a = 0;
int& b = a;//这里&符号表示引用,和int b=a;不一样
cout << &b << endl;//这里&符号表示取地址
cout<< endl;
cout << &a << endl;
a++;
b++;
return 0;
}
当读者们学习了我前一讲的文章以后,那么对于上面的程序代码的理解肯定是没有问题的。在上面的程序展示过程中,“int&”中的符号“&”代表的含义就是引用,也就是说a的别名是b,在后面符号“&a”和“&b”表示的就是我们熟知的取地址操作符,通过打印输出可以看到变量a和变量b的地址是相同的。那当我们对变量b修改会改变变量a吗?答案是会改变的