C++命名空间
来源:互联网 发布:办公软件相关书籍 编辑:程序博客网 时间:2024/06/10 07:53
一,先说下C++的using namespace std
这句话就是告诉编译器这行之后的cout,cin函数等等都是std这个命令空间内定义的二,再说下他的一般用法
1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:std::cout << std::hex<< 3.4<< std::endl;
2、使用using关键字。using std::cout;
using std::endl;
以上程序可以写成
cout << std::hex<< 3.4<< endl;
3、最方便的就是使用using namespace std;
例如:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:
cout << hex<< 3.4<< endl;
三,命名空间
所谓namespace,是指标识符的各种可见范围,为了解决C++中的名字冲突而引入的什么是名字冲突呢?
比如,在文件x.h中有个类MyClass,
在文件y.h中也有个类MyClass,而在文件z.cpp中要同时
引用x.h和y.h文件的类MyClass。显然,按通常的方法是行不能的,
那怎么办呢?引入namespace即可。
在x.h中的内容为// x.hnamespace MyNamespace1{ class MyClass { public: void f(); private: int m; }}; 在y.h中的内容为// y.hnamespace MyNamespace2{ class MyClass { public: void f(); private: int m; }}; 然后在z.cpp中引入x.h和y.h// z.cpp#include"x.h" #include"y.h" void z::f(){ //声明一个文件x.h中类MyClass的实例x MyNamespace1::MyClass x; //声明一个文件x.h中类MyClass的实例x MyNamespace2::MyClass y; //调用文件x.h中的函数f x.f(); //调用文件y.h中的函数f y.f();} 名字空间实质上是一个作用域。 通过上面的一个实例应该知道名字空间的作用了吧
四 ,下面是程序员的推荐写法
#include <iostream>using std::cin;using std::cout;using std::endl;template <typename T>T max (T a,T b){return ((a>b)?a:b);}int main(){double x,y;cin>>x>>y;cout<<"Max number is"<<(max(x,y))<<endl;cin>>x;}
五,自定义一个命名空间
namespace sdm { const double book_version = 2.0; class handle { ... }; handle& gethandle();}void f1(){ using namespacesdm; // 使得sdm中的所有符号不用加修饰符就可以使用 cout <<book_version; // 解释为sdm::book_version ... handle h =gethandle(); // handle解释为sdm::handle, // gethandle解释为sdm::gethandle ... }void f2(){ usingsdm::book_version; // 使得仅book_version不用加修饰符就可以使用 cout <<book_version; // 解释为sdm::book_version ... handle h =gethandle(); // 错误! handle和gethandle // 都没有引入到本空间 ... }void f3(){ cout <<sdm::book_version; // 使得book_version在本语句有效 ... double d =book_version; // 错误! book_version不在本空间 handle h =gethandle(); // 错误! handle和gethandle都没有引入到本空间 ... }
六下面附上命名空间的两个通俗解释
一,比如在同一房间内,我叫小强,你也叫小强,在同一空间内名字就冲突啦,怎么区分他们,
办法就是我是张家的小强,你是李家的小强,就不冲突啦,这个张家.李家就是命名空间(相互独立的)
二,命令空间就像一个文件夹,其内的对象名就像一个文件,不同的文件夹内的文件可以重名,在使用重名的文件是,
只要求说明是哪个文件夹就行啦
呵呵,我这样解释,应该都懂啦吧
- C/C++:命名空间
- C++-namespace(命名空间)
- C++-namespace(命名空间)
- C++namespace命名空间
- C#.Net命名空间
- C++_命名空间
- C++namespace命名空间
- 【C++】命名空间
- [C++]namespace命名空间
- C\C++命名空间
- C++:命名空间(namespace)
- [c++]命名空间
- <C++>2.命名空间
- C语言命名空间详解
- C++Primer学习-命名空间
- 《C++Primer》读书笔记--命名空间
- C++std命名空间详解
- 《C++》15 C++ 命名空间
- 详解如何动态调用WebService传递复杂对象的实现
- POJ2996-棋盘模拟
- C4.5决策树+代码实践
- RAC db指定local_listener
- Struts2 validator
- C++命名空间
- 移动设备客户端安全
- BIRT使用1:简介、概念、元素、报表设计器组成
- linux下提示bash:command not found
- Shell 中单引号与双引号的区别
- sdjzu 1034
- RAC db的bdump目录下cdmp文件异常增长
- fuse中进程通信
- sdjzu 1035