C++基础

前言:续接前文的总结。

1.缺省参数

在这里插入图片描述
这东西相信我们都不是陌生,这个会在你最需要它的时候的出现,在你不需要它的时候它会默默的等待着你需要它;但你却只是在需要它的时候才会搭理他。这个就是大名鼎鼎的备胎。那么它和我们这个缺省参数有何关系呢?我来回答你,缺省参数就可以看作一个备胎。

(1)缺省参数的定义:

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参。

可能定义读起来有点晦涩难懂,那么我们来画一画图吧!
在这里插入图片描述

(2)缺省参数的分类:

1.全缺省参数

void Func(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}

2.半缺省参数

void Func(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}

半缺省参数有几个要注意的地方:半缺省参数必须要从右往左定义,不能间隔着定义
在这里插入图片描述
缺省参数不能在声明和定义中同时出现,编译器不知道要去找那个。
缺省参数必须是常量或全局变量

2.函数重载

(1)定义:函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题(简单来讲就是函数名相同,函数参数不同;函数参数不同包含函数的参数类型/参数的个数/参数的顺序)

// 1、参数类型不同
int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
}

double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
}
void f(int a)
{
	cout << "f(int a)" << endl;
}
 //2、参数个数不同
void f()
{
	cout << "f()" << endl;
}
void f(int a,int b)
{
	cout << "f()" << endl;
}
 //3、参数类型顺序不同
void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
}

void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}

以上是简单的例子

(2)C++为什么会能够支持函数的重载

我们知道一个程序文件需要变成可执行程序,是需要经过预处理生成.o文件再经过编译生成.i文件然后再经过汇编 生成.o文件,最后通过链接生成可执行的程序,在汇编完成后会生成一个符号表,在链接的时候函数的调用会去符号表中寻找相对于函数调用的函数名。
我们先来看看C语言Linux下gcc编译器的编译情况
在这里插入图片描述
C语言在gcc编译器下编译完后函数的函数名修饰并没有改变,这也导致了C语言无法实现函数的重载。

我们再来看看C++在Linux下g++编译器的编译情况
在这里插入图片描述
在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参
数类型信息添加到修改后的名字中。
所以C++函数我们写的时候虽然同名,但由于参数不同,在程序进行编译时会自动根据函数参数类型进行修饰函数名,从而在链接时会在符号表能够找到对应的函数。

1.总结:这篇博客讲了缺省参数和函数的重载,函数的重载是重点内容,接下来内容尽情期待吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平平无奇。。。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值