C++ (Chapter 2)

C++(二)

1.缺省参数

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

例如:

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

运行结果:
C++ (Chapter 2)_第1张图片

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

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

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

运行结果:
C++ (Chapter 2)_第2张图片

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

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

运行结果:
C++ (Chapter 2)_第3张图片

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

运行结果:
C++ (Chapter 2)_第4张图片

注意:

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

2.函数重载

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

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

形参类型不同:

#include
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
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
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
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++ (Chapter 2)_第5张图片
C++ (Chapter 2)_第6张图片

使用C语言编译方式:

C++ (Chapter 2)_第7张图片
C++ (Chapter 2)_第8张图片

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

你可能感兴趣的:(C++,c++,开发语言,数据结构)