您的位置:首页 > 编程语言 > C语言/C++

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

2017-10-04 10:46 519 查看

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的不同之处不止此处几点,再来看看下面的代码:



运行结果:



函数重载:

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

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



可以很清楚地观察到,在函数调用中,第一次调用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;
}
代码运行结果入下:



第一个函数是全缺省,如果函数没有进行传参的话,就应用默认参数,如果有传参时,则按照传的参数执行程序。
第二个函数是半缺省,必须要传至少一个参数,另一个参数则采用默认值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 重载 缺省