C++ (Chapter 2)

C++(二)

1.缺省参数

在C++中,在函数定义的时候,可以为形参指定一个默认值,也称作缺省值.如果在调用这个函数时没有传参,那么函数在执行的时候就采用该实参的缺省值,否则使用实参的值.

例如:

#include<iostream>
using namespace std;
void Add(int x, int y = 10)
{
	cout << x + y << endl;
}
int main()
{
	Add(1);
	return 0;
}

运行结果:
在这里插入图片描述

此处在调用时值传递了一个参数,这个参数会赋值给第一个形参,第二个形参没有赋值,就会使用默认的10进行运算.

假如我们为两个参数都指定值:

#include<iostream>
using namespace std;
void Add(int x, int y = 10)
{
	cout << x + y << endl;
}
int main()
{
	Add(1,2);
	return 0;
}

运行结果:
在这里插入图片描述

注意:当要给部分参数赋默认值时,要从右边到左边依次给参数赋默认值.如下:

void Add(int x, int y = 10,int z = 10)
{
	cout << x + y + z << endl;
}
int main()
{
	Add(1);
	return 0;
}

运行结果:
在这里插入图片描述

void Add(int x, int y = 10,int z = 10)
{
	cout << x + y + z << endl;
}
int main()
{
	Add(10,20);
	return 0;
}

运行结果:
在这里插入图片描述

注意:

  • 在函数的定义和声明中不能同时包含缺省参数,不然会发生冲突,在一个完整的项目中,缺省参数最好是出现在函数的声明中.
  • 缺省参数必须从右到左依次给,不能间隔着给.
  • 缺省值只能是全局变量或者是常量,但是在很多情况下,缺省值都是常量为主.
  • C语言不支持函数带有缺省值.

2.函数重载

在人们的自然语言中,一句话往往在不同的语境中会有不同的含义,特定的语境会有特殊的含义,即这句话被重载了.

函数重载的概念:函数重载是函数的一种特殊状况,C++允许在同一个作用域中声明几个功能类似的同名函数.这些同名函数的形参列表(形参个数 或者 形参类型 或者 形参顺序 )不同.

形参类型不同:

#include<iostream>
using namespace std;
void Add(double x, double y)
{
	cout << x + y << endl;
}
void Add(int x, int y )
{
	cout << x + y << endl;
}
int main()
{
	Add(10,20);
    Add(1.2, 3.4);
	return 0;
}

形参个数不同:

#include<iostream>
using namespace std;
void Add(int x, int y)
{
	cout << x + y << endl;
}
void Add(int x, int y,int z)
{
	cout << x + y + z << endl;
}
int main()
{
	Add(10, 20,30);
	Add(10,20);
	return 0;
}

形参顺序不同:

#include<iostream>
using namespace std;
void Add(char x, int y)
{
	cout << x + y << endl;
}
void Add(int x, char y)
{
	cout << x + y << endl;
}
int main()
{
	Add('a', 20);
	Add(10,'a');
	return 0;
}

注意: 如果两个函数的形参列表相同,只是返回值不同是无法构成重载的.

请看下面这种函数重载与缺省参数写法:看是否会报错呢??

int Func(int x = 10)
{
	return x;
}
void Func()
{
	cout << "this is Func()" << endl;
}
int main()
{
    Func();
	return 0;
}

编译是无法通过的,因为Func()调用时,不知道到底是调用无参函数,函数调用有缺省值的函数.

为什么C++支持函数重载呢?

因为C++编译器修饰函数之后会变成 [_Z+函数名所占用字符个数+函数名+类型首字母],例如我在test.c文件下写了这样一段代码:

#include<stdio.h>
float Func(int x,float y)
{
	return x - y;
}
int Add(int x,int y)
{
	return x + y;
}
int main()
{
	float x = Func(3,2.1);
	int y = Add(1,2);
	printf("lf",x);
	printf("%d",y);
	return 0;
}

接着在linux环境下使用C和C++两种编译器,查看最后生成的.o文件

使用C++编译方式:
在这里插入图片描述
在这里插入图片描述

使用C语言编译方式:

在这里插入图片描述
在这里插入图片描述

  • 那么最后通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

这里是彪彪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值