当我们写很长的代码的时候,有时候写的代码就会出现重名的时候,尤其是当小组合作完成一个项目的时候,就更有可能出现重名的情况,那怎么办呢
可以用命名空间来解决
一:命名空间:放代码的地方,防止重名
防止重名:比如一个特殊集团的名字,非常罕见,和别人重名的几率很小,而隶属于这个集团的成员们的名字其实也是隶属于这个集团的名字,那就更
不可能重名了,这就是命名空间的意义
定义格式:关键字namespace 命名空间标识符;
语法:namespace 命名空间标识符
{
命名空间成员(变量,函数。。。。。)
}
注意:一:命名空间标识符要符合标识符命名规则
二: 命名空间可以在全局去写,也可以在局部去写,就是不能在函数和类内部定义
namespace 命名空间标识符
{
namespace 命名空间标识符
{
}
}
//可以这样写,另外也说明了命名空间可以嵌套使用
int main()
{
namespace 命名空间标识符
{
}
}
//是不能这样写的,因为这样就是在函数内部定义了,是不被允许的
三:作用域不用加分号,定义域用加分号
四:命名污染:命名空间标识符重名了
访问:
using namespace 命名空间标识符;//这么写之后,用作用域去访问命名空间里面的成员
作用域符号 ::
可以理解为:前面::后面 “前面的后面”
张三::老婆 “张三的老婆”
**很多人都有老婆,如果你不加这个作用域,怎么知道是谁的老婆
举个例子:namespace YU
{
int num;
}
int num;
using namespace YU;
int main()
{
int num;
num = 0;//不知道是谁的num,发现是局部的,加上::变成::num可以访问外边的全局变量num,那么命名空间里的num怎么访问呢,可以变成YU::num
//作用在YU里面的num嘛,显而易见,不过仅仅这样是不行的,要在前面加一个using namespace YU,意为使用这个命名空间,不然这个命名空间是关闭的
//因为我们只是给它定义了,当我们要使用它的时候,就要加个using namespace...
return 0;
}
在命名空间中写个函数成员,然后去访问:
namespace YU
{
int num;
void test()
{
}
}
int num;
using namespace YU;
int main()
{
YU::num= 0;
YU::test()= 0;
return 0;
}
在命名空间中定义函数fun,但是要定义的函数太长了,不想再命名空间写,想在命名空间外写,这要怎么办,这么才能在外面写,然后还知道这个函数
隶属于这个命名空间
n
amespace YU
{
int num;
void fun();
}
void YU:: fun()//加一个作用符就完事了
{
}
using namespace YU;
int main()
{
YU::num = 0;
return 0;
}
嵌套命名空间怎么访问:
namespace YU
{
int num;
void fun();
namespace thank
{
int val;//怎么去访问val,用两个作用符就完事了
}
}
void YU::fun()//加一个作用符就完事了
{
}
using namespace YU;
using namespace YU::thank;//这样就能访问嵌套命名空间的成员了,加个using namespace 就完了,用哪个就using 哪个就完事了
using YU::thank::val;//或者这样写,直接就能访问了,但是只能访问val,不代表可以访问其他的,除了val其他的都访问不了,所以还是要using
//命名空间整体
int main()
{
YU::num = 0;
YU::thank::val;//用两个作用符就完事了
return 0;
}
命名空间取别名:
namespace jihfohowhfouhosndofhosbo //这太长了,怎么办呢?直接取别名
namespace jihfohowhfouhosndofhosbo = 21;//jihfohowhfouhosndofhosbo 和21是一样的。
cin和cout(c++里面的输入输出)
cin 输入 == == = >scanf()
cout输出 == == >printf()
其实还是有本质区别的,scanf 和printf是函数,cin和cout严格来说应该是命名空间里的成员,
在使用cin和cout之前要写一个头文件:#include<iostream>//c++中标准输入输出头文件
using namespace std://cin 和cout 是std这个命名空间中的成员
使用cin和cout 之前做的准备工作分为两种:
一:#include<iostream> 二:#include<iostream>
using namespace std : using std::cin;
using std::cout;
//区别就在于是想访问std中的cin,cout ,还是想访问std中的所有成员
和cin和cout相对应的是endl 意为结束且换行
毕竟是命名空间里面的成员,所以在使用cin和cout之前,也要加上using.....
using std::cin;
using std::cout;
using std::endl;
std::cin >> a >> b >> c >> f;
std::cout << a << b << c << d << f << endl;
//可以不加endl,不加就是没有结束换行而已,箭头方向与输入输出相反,输出箭头就是内
string的基本使用:
string 实际上是一个c++的类,字符串类
在使用string之前要加上:
#include<iostream>
using namespace std;
#include<string>
int main()
{
string str = "abnce"//加上头文件<string>,这样就可以把string当成一个类型使用了
str.length();
return 0;
}