C++初识之函数重载、缺省参数

C++初识之函数重载、缺省参数

C语言是结构化和模块化的语言,它是基于过程的,在面对小规模的问题是还比较容易来处理,但是当在公司以及个人解决某些复杂,程序规模比较庞大的问题时,C语言就显得有点力不从心了,故,C++就应运而生了~~~

相比于C语言,C++是面对对象的语言,虽然相比于如今的纯面向对象语言JAVA一点,其显得不那么专一,但是其却将同时具有基于过程和面对对象的机制,大大提高了然间开发的效率。

简单分析:

来看看一个简单的C++程序:

#include <iostream>
using namespace std;
int main()
{
	int a = 0, b = 0;
	
	//输入数字
	cin >> a >> b;
	
	//输出和
	cout << "a + b = " << a + b << endl;
	
	system("pause");
	return 0;
}

这是一个非常简单的C++程序,下面来分析一下这段代码:

1. 预处理指令里包含的是输入输出流,iostream即是i-o-stream,输入输出流,其作用是向程序提供输入输出时所需要的一些信息。

2. 不同于C语言的,C++程序包含了一个命名空间,即 using namespace std; 其含义是:使用命名空间std。这是因为C++标准库中的类和函数是定义在命名空间std中的,如果程序段要用到C++标准库中的类或函数,就要用 using namespace std; 作提前声明,表明要用到命名空间内的内容。

3. 在C++中,输入输出是应用cin,cout这两个对象。

cin是istream类的派生类的对象,它通过提取运算符(">>"),从标准输入设备中提取数据送到输入流中。在提取数据时通常会跳过输入流中的空格、Tab键、换行符等。

cout是ostream流派生类的对象,它是通过插入运算符("<<"),将数据流中的数据插入到输出流,然后送达显示设备。

上面即是针对这段简单C++程序的分析。

当然,C++与C的不同之处不止此处几点,再来看看下面的代码:

TIM截图20171003232436.png
运行结果:
image.png

函数重载:

显而易见,在这段代码中存在了函数的重载,而为什么C++支持函数重载,而C语言不支持呢?

首先,要想知道其原因,必须从函数调用的内部去分析,我是在linux系统下来进行了相应的观察,如图:

image.png

可以很清楚地观察到,在函数调用中,第一次调用add函数,其在底层调用时为:_Z3addii; 第二次时为:_Z3addfi;

即可分析在C++中,对于函数调用时,具有函数名修饰,而在linux中观察有其函数名修饰规则,是由统一的前缀(如此处的:_Z3)+函数名(add)+参数名首字母(ii;fi)构成。

而函数重载,即相同的函数名,只要函数参数的类型或个数有所不同,返回值可同可不同,则不影响相互之间的调用。

而在C中,对于函数的调用,统一是有函数名来完成,所以,不支持函数重载。

3. 缺省参数

在C++中,对于函数的参数支持缺省类型,而且全缺省,半缺省均支持

#include <iostream>
using namespace std;

//全缺省
void add1(int a = 1, int b = 2)
{
	cout << "a + b = " << a + b << endl;
}
//半缺省
void add2(int a, int b = 2)
{
	cout << "a + b = " << a + b << endl;
}

int main()
{
	add1();
	add1(5, 3);

	add2(5);
	system("pause");
	return 0;
}
代码运行结果入下:
image.png

第一个函数是全缺省,如果函数没有进行传参的话,就应用默认参数,如果有传参时,则按照传的参数执行程序。

第二个函数是半缺省,必须要传至少一个参数,另一个参数则采用默认值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值