【C++】入门二

下面我们说一下缺省参数,那么什么是缺省参数呢?就是说在定义或者声明函数时给形参赋予一个确定的值(也叫缺省值),那么当我们调用这个函数的时候,就可以不传值也可以传值,传值的话缺省值就没作用了,不传值的话就按缺省值去参与函数的运行,下面是一个简单的例子

#include
using namespace std;
void Func(int a = 10, int b = 20) {
	cout << a + b << endl;
}
int main() {
	Func();//30
	Func(1, 2);//3
	return 0;
}

这就是一个简单的例子,我们在调用函数时既可以传值也可以不传值,函数的处理方式是不一样的。
缺省函数可以分为全缺省和半缺省,顾名思义,全缺省就是形式参数全都有缺省值,我在调用函数的时候可以完全不传实参,就像上面的例子中的第一个调用一样;半缺省就是形参部分有缺省值,但谁有缺省值也是有规则的,规则是给缺省值要从右往左连续给,这也是为了减少传参时候的争议。在传参的时候就要给没缺省值的参数传参。就比如下面这样

#include
using namespace std;
void Func(int a , int b = 20) {
	cout << a + b << endl;
}
int main() {
	Func(1);//21
	return 0;
}

另外还要提的一个点就是如果一个函数的声明和定义分离时缺省值只能在声明给,不能在定义给

#include
using namespace std;
void Func(int a=10, int b=20);
int main() {
	Func();
	return 0;
}
void Func(int a, int b ) {
	cout << a + b << endl;
}

下面说一下函数重载,我们知道,在C语言中是不支持函数重名的,这就导致我们在完成一些任务时很烦,所以呢,C++就引入了函数重载这个概念,意思就是允许函数重名的存在,但是它们的参数一定是不同的,这里的不同可以包括参数数量,参数类型等等,对于返回值没有要求,下面也是举一个函数重载的例子

#include
using namespace std;
void Add(int a, int b) {
	cout << a + b << endl;
}
void Add(double a, double b) {
	cout << a + b << endl;
}
int main() {
	Add(1, 2);//3
	Add(1.1, 2.2);//3.3
	return 0;
}

在执行函数时,编译器会匹配参数的类型从而选到合适的函数,上边例子中第一个就会默认调用第一个函数,因为它们的参数类型是匹配的,第二个同理。
不知道大家有没有想过,为什么C++支持函数重载呢?或者说本质上C++是通过什么去实现的呢?
我们知道,C语言或C++从我们写的代码到形成可执行程序是要经历几个步骤的,有预处理,编译,汇编(转换成二进制的机器码)和链接几个过程,在编译阶段,只要编译器能找到一个函数的声明就能通过,它不需要知道函数的地址(所以当我们在只写函数声明不写定义的时候,编译器报的是链接错误),
在这里插入图片描述

而是在链接这个阶段才需要知道函数的地址,那么怎么找到这个地址呢?C语言就是通过函数名,而C++还得加上函数的参数才能找到,在windows下也可以看见
下面是分别在C和C++下的报错情况
在这里插入图片描述
在这里插入图片描述
上面的C就只跟函数名有关系,下面的C++的中间的那群“乱码”就是C++下的对于函数名的修饰在Linux环境下是这样的_Z 函数名字符个数 函数名 参数首字母

你可能感兴趣的:(c++,开发语言)