命名空间:
在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++的目标文件符号表不是直接使用函数名来标识和查找函数的,还和参数有关。有了函数名修饰规则,只要参数不同就不存在歧义和冲突。