C++入门1
命名空间
namespace关键字
下面有一段程序
#include<stdio.h>
#include<stdlib.h>int rand=0; //当rand变量在main函数里面的话不会报错,因为在main函数里面时局部变量,//函数的作用域是全局,所以不会冲突
int main()
{printf("%d ",rand);return 0;
}
上面的这段程序在运行的时候会报错,在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”
于是,C++就引用了namespace关键字
namespace关键字的使用
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}
中即为命名空间的成员
namespace LH
{int rand=0;int add(int x,int y){return x+y;}struct node{int val;struct node*next;}}
比如下面的程序
#include<stdio.h>
#include<stdlib.h>namespace LH
{int rand = 0;
}
int main()
{printf("%d ",LH::rand); // ::是作用域的意思,当::左边没有任何东西的时候,表示全局作用域return 0;
}
输出结果为0,现在就不会报错了
namespace关键字还可以嵌套使用
namespace LHH
{namespace LH{int rand = 0;int add(int x, int y){return x + y;}}}
int main()
{printf("%d\n",LHH::LH::rand);printf("%d\n", LHH::LH::add(1, 2));return 0;
}
输出结果
unsing 作用域名称::变量
这个的作用是用于想省略作用域的写法
比如下面的程序
在上面的程序中,需要经常使用X变量,可以使用画圈的那句话,这样就可以避免写 LH::x,避免麻烦
不同文件里的namespace
在一个项目里面的不同文件里面,比如 test.h test.cpp 这种文件里面的话,如果命名空间相同的话,在使用的时候会合并在一起,是一个整体
缺省参数
int add(int x=1,int y=2)
{return x+y;
}
这种就是缺省参数,在调用函数的时候如果不传递参数,会使用上面的值
int main()
{int a=add();return 0;
}
上面a的值就应该是3,这种属于全缺省参数,
还有半省参数,
int add(int x,int y=1,int z=1)
{return x+y+z;
}
值得注意的是,在写半缺省参数的时候,只能从右往左缺参数
int main()
{int a=add(1); //输出结果为3return 0;
}
cin和cout
这两个是C++里面用来输入和输出变量的,相当于C语言中的printf和scanf
在使用的时候加上using namespace std(但是这仅仅限于在平时的练习当中),大型的项目开发不建议,因为std是C++默认的标准,里面包含很多东西,会让项目的空间很大
#include<iostream>
//using namespace std; 不建议使用
using std::cin;
using std::cout;
using std::endl; //换行用的int main()
{int a = 0;int b = 0;cin >> a >> b;cout << a << " " << b << endl;return 0;
}
输入1 2
输出 1 2