快捷搜索: 王者荣耀 脱发

【C++初阶】:缺省参数、函数重载与命名空间

命名空间:

在C语言中,我们定义的变量名,函数名都有可能和库里面重名冲突。为了解决这个问题,c++定义了命名空间。

用法:

1.如何定义

namespace zwy
{//命名空间中可以定义变量/函数/结构体
	int a=0;
	int b = 1;
	int Add(int num1, int num2)
	{
		return num1 + num2;
	}
	struct student
	{
		int age;
		char name[20];
	};
}

2.如何使用

int main()
{//第一种使用方法
	std::cout << zwy::a << std::endl;
	std::cout<<zwy::Add(zwy::a,zwy::b)<<std::endl;
	struct zwy::student st1 = { 2, "ddw" };//结构体使用struct放在命名空间前面
	std::cout << st1.name << std::endl;
	return 0;
}
//第二种使用方法
using namespace std;//全部展开,但是隔离就失效了
//第三种方法
using zwy::a;//将命名空间的某个成员引入

3.另外补充:

命名空间可以嵌套定义。

缺省参数:

如何使用:

//1.全缺省
void Func(int a = 10, int b = 20,int c=30)
{
	
}
int main()
{
	Func();
	return 0;
}
//2.半缺省
void Func(int a , int b = 20, int c = 30)
{
	
}
int main()
{
	Func(1);
	return 0;
}

注意点:

1.关于半缺省,参数只能从右往左连续缺省。

2.缺省参数不能在声明和定义中同时出现。(推荐在声明)

函数重载:

在同一作用域声明几个同名函数,这些函数的形参列表(参数个数,类型,或顺序不同)。

返回值不同不能构成重载,缺省值不同不能构成重载。

面试常考问题:

为什么C语言不支持函数重载,而C++支持函数重载?c++是如何支持的?

答:C语言不支持函数重载,因为编译的时候,两个重载函数,函数名相同,在符号表中存在歧义和冲突,其次链接的时候也存在歧义与冲突。因为C语言是直接使用函数名去标识和和查找,而重载函数函数名相同。而c++不同,c++的目标文件符号表不是直接使用函数名来标识和查找函数的,还和参数有关。有了函数名修饰规则,只要参数不同就不存在歧义和冲突。

经验分享 程序员 微信小程序 职场和发展