目录
5.1 C语言中我们学过两种传参方法 按值传参 和 按指针传参
1.命名空间
1.1命名空间简介
1.命名空间随标准C++而引入,相当于一个灵活的文件域(全局域),以关键字namespace开头给其起个名字,并用大括号把定义区域括起来(声明块)。
using namespace name{
变量;
函数;
.....
}
2.在域外使用域内成员时,需要加上命名空间名作为前缀,再加上域操作符“::”,可以使用嵌套定义。
命名空间name::命名空间内变量name
3.如果在关键字namespace之前使用using,就不必使用限定修饰名,即可以一次性使命名空间中所有成员都可以直接被使用。
using namespace 命名空间name;
4.标准C++库中所有组件都在std的命名空间中声明和定义的,在标准C++平台调用如下语句
using namespace std;
1.2代码示例:
//0.定义命名空间
namespace Name
{
//1.定义变量
int rand = 10;
//2.定义函数
int Add(int left, int right){
return left + right;
}
//3.自定义类型 结构体类型
struct ListNode
{
struct ListNode* next;
int data;
}; //这个ListNode 是类型 所以要加; 实验中 这里不带错误 带正确
} // Name 是命名空间的名字,所以不用加; 实验中 这里带不带都正确
//2.命名空间可以嵌套命名空间.M嵌套在N里面
namespace N
{
int a = 10;
int b = 0;
int Sub(int left, int right){
return left - right;
}
namespace M
{
int c = 0;
int d = 0;
int Sub(int left, int right){
return left - right;
}
}
}
//3.在一个工程中,可以定义相同名称的命名空间
namespace A
{
int Div(int left, int right){
if (right == 0)
exit(0);
return left / right;
}
}
namespace A
{
int a = 10;
int Sub(int left, int right){
return left - right;
}
}
//在使用时,相同命名空间名字的内容会合并在一起。
相当于
namespace A{
int Div(int left,int right){
if (right == 0)
exit(0);
return left / right;
}
int a = 10;
int Sub(int left, int right){
return left - right;
}
1.3 注意事项
如果要多次使用一个命名空间N里的变量a,每次写 N::a 比较麻烦,采用using N :: a;这样在后面使用的时候就可以直接写a;(注意:这样就相当于把N里面的a变成该文件中的全局变量a,如果该文件中本来就有定义全局变量a,就会出现重定义,发生错误。所以在使用using N::a 时,一定确保文件里面没有全局变量a)。
using N::a; 可以用这种方法设置 变量 之后直接写a 但是如果需要使用的变量太多还是特别烦。
using N::Add; 可以用这种方法设置 函数 之后直接写Add 但是如果需要使用的函数太多还是烦。
using namespace N; 优点他使用特别方便,N里面的内容都可以直接使用 ,但是可能会造成大量冲突。如果遇到冲突,那么就恢复前面那个样子 using N:: a; 单独写。
int a= 10;
int main(){
int a = 30;
// 打印主函数内a 变量
printf("%d\n", a);
// 打印全局变量a
printf("%d\n", ::a); //:: 全局变量操作符
return 0;
}
using N::a;
using N::Add;
using manespace N;
int main(){
int a = 30;
printf("%d\n", a);//30
//打印命名空间N中的a
printf("%d\n", N::a);
//使用命名空间里面的函数
N::Add(10, 20);
//多次打印命名空间N中的a
printf("%d\n", N::a); //这样写太麻烦了
printf("%d\n", N::Add);// 这样写太麻烦了
printf("%d\n", Add); //直接写这个就可以
printf("%d\n", a); //直接写这个就可以
system("pause");
return 0;
}
2.c++输入输出
- 使用输入和输出需要头文件iostream;
#include<iostream>
- 输入 cin>> a>>endl;
cin>>"输入a的值为:" >>endl;
- 输出 cout<<a<<endl;
cout<<"输出a的值为:" << a <<endl;
3.参数问题
3.1 C语言c++参数对比
1.C语言中一个函数如果没有明确给出返回值,则返回值是int型。c++里面如果函数没有返回值,必须写上void,否则会报错。 (C语言更加严谨)
2.C语言中函数如果没有明确指明参数时,调用时可以传递多个参数,类似于不定参数类型函数。c++中函数如果没有参数,那么在调用时也不能传递任何参数。(因为c++有严格的参数类型检测)。
3.void name (void){ }; C语言中如果调用这个函数时,往里面传参,就会出现错误。(因为此时已经明确指明这个函数的参数类型是void)。
3.2缺省参数
- 缺省参数:缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用函数时,如果没有指定实参则采用该默认值,否者使用指定的实参。
3.2.1全缺省
全缺省:全缺省参数所有参数都有默认值,如果没有手动传参,那么编译器会使用默认参数列表中的参数。但是这里值得注意的是,如果传参的时候只传了部分参数,那么该值会被从左至右匹配。