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