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语言可以混着用,哪个方法方便使用哪个
#