目录
1.命名空间
a.命名空间定义
(1)、 域作用限定符
(2)、域访问顺序
2.C++的输入&&输出
1.命名空间
1.C语言存在命名冲突的问题,库之间的冲突
2.我们互相之间的冲突
编辑
a.命名空间定义
//域
namespace YanYingjie
{
int rand = 0;
}
(1)、 域作用限定符
::域作用限定符,修改了其访问顺序,使得其不访问局部域,直接访问全局域
int a = 0;
int main()
{
int a = 1;
printf("%d\n",a);
printf("%d",::a);
return 0;
}
(2)、域访问顺序
访问顺序:局部域->全局域->命名空间域
访问命名空间域的前提:
①、展开命名空间域
展开命名空间域之后,命名空间域相当于暴露在全局,此时,命名空间域
变成了全局变量,如果同时访问命名空间域和全局变量则直接报错,展开意味着,是否去命名空间
内部进行搜索
using namespace yqy;
②、指定访问命名空间域
int a = 0;
namespace yqy
{
int a = 2;
}
int main()
{
//int a = 1;
printf("%d\n",a);
printf("%d",yqy::a);
return 0;
}
namespace之间可以互相嵌套
namespace N1
{
int a = 0;
int b;
int c;
int Add(int left,int right)
{
return left + right;
}
namespace N2
{
int a = 1;
int b;
int c;
int Add(int left, int right)
{
return left + right;
}
}
}
int main()
{
int left = 1;
int right = 2;
printf("%d",N1::Add(left,right));
return 0;
}
问题:
为什么头文件没有.h
//头文件,又称io流
#include<iostream>
//为什么不加.h
//早些年时候,确实存在.h,很老的编译器确实可以使用vc6.0 没有命名空间
//强制<iostream.h>使用则会报错
std是C++标准库,using namespace std;意味着,编译过程中,可以直接去std库中进行
访问,但是直接展开并不好,如果我们的定义,如果与库中的内容冲突,则会报错,最好用谁,
展开谁,项目里面尽量不要展开
解决方法:我们可以把常用的函数展开,using std::cout; using std::endl;
using namespace std;
int main()
{
std::cout << "hello world" << std::endl;
cout << "hello world" << endl;
return 0;
}
2.C++的输入&&输出
注:std::cout和std::endl,厉害的地方在于自动识别数据类型
说明:
1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
以及按命名空间使用方法使用std。
2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
iostream >头文件中。
3. <<是流插入运算符,>>是流提取运算符。
4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
C++的输入输出可以自动识别变量类型。
5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,
这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。后面我们还有有
一个章节更深入的学习IO流用法及原理
C++和C语言可以混着用,哪个方法方便使用哪个