【c++笔记一】名字空间(namespace)
2015年1月21日晴
寒假第一天,程序猿的第一天,减肥的第一天(瘦了两斤,鼓掌)
学要有所得,既然今天学了一天,是该好好整理一下今天所学的内容。
菜鸟一枚,如有bug还望指点一二。
-------------------------------------------------------华丽的分割线---------------------------------------------------------------
名字空间(namespace)
1.为什么需要名字空间呢?
2.什么是名字空间?
#include <iostream>
using namespace std;
int main(){cout<<"hello world"<<endl;return 0;
}
在第二行我们看见了我们看到了namespace这个单词,很多初学者肯定不知道这是干什么的。老师或许告诉你,不用管他干什么的,知道写上去就行了。读书最怕一知半解,我们接下来就来看看这到底是干什么的。
3.名字空间的作用:
(1)划分逻辑单元
(2)避免名字冲突
4.怎样定义名字空间?
(1)名字空间定义
#include <iostream>
namespace Class1{char xq[] = "我是一班的小强";
}
namespace Class2{char xq[] = "我是二班的小强";
}
int main(){std::cout<<Class1::xq<<std::endl;std::cout<<Class2::xq<<std::endl;return 0;
}
ps:1.cout和endl这两个属于std这个名字空间
![](/assets/blank.gif)
(2)名字空间合并
#include <iostream>
using namespace std;
namespace Class1{char xq[] = "我是一班的小强";
}
namespace Class2{char xq[] = "我是二班的小强";
}
namespace Class1{void show(){cout<<xq<<endl;}
}
namespace Class2{void show(){cout<<xq<<endl;}
}
int main(){Class1::show();Class2::show();return 0;
}
我们可以看到,show()这个函数和xq字符串并没有定义在一起,而是分开定义,但是同时属于一个名字空间。
(3)声明定义分开
#include <iostream>
using namespace std;
namespace Class1{char xq[] = "我是一班的小强";void show();
} // 声明
namespace Class2{char xq[] = "我是二班的小强";void show();
} //声明int main(){Class1::show();Class2::show();return 0;
}
namespace Class1{void show(){cout<<xq<<endl;}
} // 定义
namespace Class2{void show(){cout<<xq<<endl;}
} //定义
运行结果同样一样,果然和我们以前学的声明定义一样,是可以分开的写的。
5.怎样使用名字空间?
(1)作用域限定符(“ :: ”)
这个相信大家并不陌生了,因为上面我们已经用到了 。
(2)名字空间指令
#include <iostream>
using namespace std;
namespace Class1{char xq[] = "我是一班的小强";void show(){cout<<xq<<endl;}
}
namespace Class2{char xq[] = "我是二班的小强";void show(){cout<<xq<<endl;}
}
int main(){using namespace Class1;show();Class2::show();return 0;
}
运行结果还是一样的,main函数的第二行调用的show()函数为什么是名字空间Class1里面的show呢?
using namespace Class1;
using namespace Class2;
show();
结果肯定就是编译器(我用的codeblocks)报错了。
![](/assets/blank.gif)
(3)名字空间声明
int main(){using namespace Class1;using Class2::show;show();return 0;
}
最后使用的是Class2里面的show。
6.关于名字空间还需要注意的地方:
(1)无名名字空间
#include <iostream>
using namespace std;
char my[] = "我是谁?";
int main(){cout<<::my<<endl;return 0;
}
my是一个我们经常使用的全局变量,可能在我们没说名字空间之前你没有注意它的名字空间是什么吧?
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/titter.gif)
(2)名字空间的嵌套
#include <iostream>
using namespace std;
namespace hnsd{namespace sjy{namespace jsj{char xq[] = "小强";}}
}
int main(){cout<<hnsd::sjy::jsj::xq<<endl; // 嵌套的名字空间需要一层一层的解析return 0;
}
大部分用法和上面的一样,唯一要注意的地方就是,你嵌套了多少层,就需要解析多少层(也就是::符号要用几个啦,注意上下层次的关系不要弄错了)
(3)给名字空间取别名
namespace name = hnsd::sjy::jsj;
cout<<name::xq<<endl;
这效果是一样一样的。很简单吧?
【c++笔记一】名字空间(namespace)相关推荐
- c++ 名字空间 namespace
定义 namespace 名字空间的名字{ 全局变量 类型定义 函数 } 意义 对于一个较大型的C++程序来说,需要由多个程序员相互协作编写,这样的情况下容易出现不同程序员在需要负责的程序部分使用相同 ...
- C++程序设计语言学习笔记:名字空间
1.名字空间(namespace)的概念用来直接表示本属一体的一组特性,例如库代码.名字空间的成员都位于相同的作用域中,无需特殊符号即可相互访问,而从名字空间外访问它们就需要显式符号. 2.显式限定: ...
- 名字空间(namespace)
作用:缓解名字污染. 访问名字空间内成员.类的三种方式: 1.名字空间别名 namespace International_Business_Machines { int a; .... } //别名 ...
- C++ 名字空间(namespace)
C++支持多种作用域:全局域.局部域.块域.类域,还有名字空间域等. 作用域:规定变量能够被访问的范围,离开这个范围的变量不能被访问. 作用域是一个独立的地盘,让变量不会暴露出去,也就是说作用域最大的 ...
- C++引入名字空间(namespace)意义何在?为什么using namespace std会成为常用语句?
在没有引入名字空间的概念之前,用户在一个cpp文件(即用C或C++代码写的源码文件)的开始位置一般会引入头文件,比如<stdio.h>,这里面就有已经定义好的全局变量.函数名.和类名,如果 ...
- c++ 静态类成员函数(static member function) vs 名字空间 (namespace)
好多人喜欢把工具函数做成static member function.这样以增加隐蔽性和封装性,由其是从C#,java转而使用c++的开发人员. 例如: class my_math { public: ...
- python 作用域 前缀_Python 之作用域和名字空间
作用域与名字空间 Python有一个核心概念是名字空间(namespace),namespace是一个name到object 的映射关系,Python有很多namespace,因此,在代码中如果碰到一 ...
- java schema名_关于Schema的名字空间
基本的 XML Schema 的使用就是这样,下面我们要介绍 XML Schema 的另外一个核心的部分也是 Schema 最关键的一个部分,就是关于 Schema 的名字空间( namespace ...
- c++之头文件基本输出,输入,名字空间,引用,内联函数,函数重载,缺省参数
c++之头文件,基本输出,输入,名字空间,引用,内联函数,函数重载,缺省参数 文章目录 c++之头文件,基本输出,输入,名字空间,引用,内联函数,函数重载,缺省参数 前言 一.头文件,基本输出,输入 ...
- python的名字空间(namespace)与作用域(scope)
名字空间(namespace) 1).名字(name)与对象(object) 对象:对象一块存储区域,用来存储值,同时包含对该值所支持的一系列方法,也包含一系列属性. 名字:每个名字对应一个对象,多个 ...
最新文章
- OKR的实施案例:OKR不需要很复杂
- NBT:南农突破成果—噬菌体:土壤“狙击手”激发根际防御军团(附视频)
- 19、修改和删除事件(ALTER/DROP EVENT)
- ebay注册流程_跨境电商平台eBay企业入驻流程
- 没想到啊!3980元的Web前端视频今日免费送。
- Linux Shell脚本入门教程系列之(十四) Shell Select教程
- Python常用第三方库大盘点
- 免费报名通道限时开启!解锁QCon「AI 时代下的融合通信技术」专场
- SQL必知必会-更新和删除数据
- e4a生成r.java错误,编译时候出现英文错误
- flash人物原地走路_Flash怎么制作一个行走的小人动画?
- 因为计算机丢失d3dx10,Win7打开剑灵游戏提示丢失d3dx10_43.dll怎么解决
- 【UE4】Bounds 详解
- uni-app 开发小程序,使用到u-charts.js时会出现弹框或下拉框部分与图标重叠的情况(还有在解决过程中出现 vasToTempFilePath: fail canvas is empty)
- 计算机设备2后符号,表情符号含义展示的方法及设备与流程
- □ 影片名:《陈好-女人要爱自己》(7012) 在线播放
- 创意休闲手游《急速感染》震撼来袭~
- 加入滚动条的html代码
- 收敛级数加发散级数是什么情况?
- LMS自适应滤波算法的 matlab实现