grammer
命名空间(nameSpace)
单独开辟一块新的作用域用来存放需要存放的变量,函数,类等。
命名空间定义
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}
中即为命名空间的成员。
正常使用命名空间
namespace wsy
{
//命名空间中可以定义变量,函数,类等不同的东西
int wsy = 0;
int hard = 1;
int add(int a, int b)
{
return a+b;
}
struct Node
{
struct Node* next;
int val;
}
}
嵌套命名空间
namespace wsy
{
//命名空间中也可以继续嵌套命名空间
int wsy = 0;
int hard = 1;
namespace hard
{
int add(int a, int b)
{
return a+b;
}
struct Node
{
struct Node* next;
int val;
}
}
}
定义两个相同的命名空间
同一个工程中允许有多个名称相同的命名空间,但编译器最后会将名称相同的命名空间的内容合到同一个命名空间中,这个时候需要命名空间中如果有重复的定义就会导致报错。
// test.h
namespace N1
{
int Mul(int left, int right)
{
return left * right;
}
}
// test.cpp
namespace N1
{
int Mul(int left, int right)
{
return left / right;
}
}
这里的test.h和test.cpp就定义了相同的函数,编译器会将这两个命名空间合并为一个命名空间,因为两个命名空间都定义了一个名微Mul的函数,就会导致出现报错
使用命名空间
通过加命名空间名称和作用域限定符
namespace wsy
{
int b = 0;
}
int main()
{
int a = 0;
printf("%d", wsy::b);
return 0;
}
使用using将命名空间中需要使用的值引入
namespace wsy
{
int b = 0;
}
using wsy::b;
int main()
{
int a = 0;
printf("%d", b);
return 0;
}
使用using namespace 加命名空间名称将命名空间引入
//一般不会直接 using namespace std;直接将标准库引入,因为用命名空间将标准库包含本身就是为了防止我们声明的变量名称与标准库冲突。
namespace wsy
{
int b = 0;
}
using namespace wsy;
int main()
{
int a = 0;
printf("%d", b);
return 0;
}
输入输出流
输入输出流可以不用管数据类型,使用方便
cout (插入流)
cin(输出流)
缺省函数
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。
void wsy(int a = 10)
{
cout << a << endl;
}
//正常的函数参数应该是 int a ,但这里的参数是 int a = 10,这里的 = 10 就是缺省参数。
有了缺省参数,当你往函数里面传参时,它就会使用你传进去的值,当你往里面传个空时,它就会使用自己的缺省参数。
全缺省参数
//函数有多个参数并且全都有缺省参数的就叫全缺省参数。
void wsy(int a = 10, int b = 20, int c = 30)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
//传参方式
int main()
{
wsy(1, 2, 3);
wsy(1, 2);
wsy(1);
wsy();
return 0;
}
半缺省参数
void wsy(int a , int b = 20, int c = 30)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
注意:
- 半缺省函数必须从右往左连续缺省,
- 缺省参数不能同时在函数声明和定义中同时出现,如果两者缺省参数不相同,编译器将无法判断谁才是缺省参数
- 缺省参数必须是全局变量或者常量。