C++命名空间
2016-07-18 09:51
260 查看
好久没写博客了,现在也开始了C++的学习,最近一个半月非常颓废,没有好好编程,旧的结束,代表着新的开始,大三了,不可蹉跎岁月!!!
今天我们首先从C++最基础的东西开始,大二第一个学期接触过C++,可惜当时学的真是云里雾里,现在自己一步步进行摸索,感觉好多都是恍然大悟的样子。多余的就不多说了,开始今天的学习。
首先我们来讲下命名空间。
其实这个要归结到C语言的一些缺陷上来说,比如说,在你开发过程当中,多个全局变量重名了,如果在C当中,这是肯定无法编译过去的,所以这里,c++为了解决全局变量命名重名的问题,出现了命名空间。
我们在写C++中经常写的就是这样的一句话:
这句代码其实就是我们对命名空间空间的使用。
在这里的std其实就是一个命名空间。
命名空间可以让我们对不同的重名数据进行使用。
比如上面这个程序,在C++当中,我们给了两个命名空间 A和run,这两个命名空间中的a就是重名的变量。在这里要说一个运算符,::域运算符,::是运算符中等级最高的。
using呢,其实也是一个关键字,这个关键字起到使用某个命名空间的作用。
using也是含有作用域的。c++是从上往下进行编译的,using的作用域也是从上往下,从using代码开始一直到代码结束,所以我们一般就把using放到上面,这样作用域就最大了。另外,要记住using所使用的命名空间,必须先定义好才行。
比如:
这样就是不行的,run命名空间必须先定义,再使用。
另外,如果我们是这样进行操作也是不行的。
这样就是对变量重名,会出现不明确的冲突,解决方法就是对各个变量加上各自的命名空间。
没有命名的命名空间可以进行直接的调用。
命名空间可以进行嵌套使用。
命名空间也可以直接进行赋值的。(给命名空间起别名)
例如:
扩充命名空间:当命名空间不够,可以在外部进行命名空间的内容的添加。
也就是说命名空间在内部外部都可以进行添加。
例如:
命名空间中尽量不要定义函数,在软件开发的过程当中,当要实现一个功能,当要改代码时,会比较费劲,一般对函数的操作更喜欢使用函数指针,让它指向外部的一个函数。这样代码的可维护性会变得更好。。
例如:
这样,你对函数的功能如果进行修改就不会影响到其他模块。
namespace当中的所有的数据都是公有的。所有数据皆是共有的,不允许有私有的内容。而对于结构体来说默认是共有的。
命名空间与全局变量的差别:
例如:
运行这一段代码,在C当中,没有办法让a输出1。而c++当中,只需要这样做:
C语言当中没有办法引用全局变量。已经被屏蔽了。C出现重名,会无法引用全局变量。
在C++当中就可以使用域运算符,这时候把全局当作了一个域进行引用。
::前面什么都没有一般就是意味这全局。
最后要说其实有没有命名空间其实就是我们看c和c++的区别。
命名空间在软件开发过程当中主要应用于迭代式开发。
今天我们首先从C++最基础的东西开始,大二第一个学期接触过C++,可惜当时学的真是云里雾里,现在自己一步步进行摸索,感觉好多都是恍然大悟的样子。多余的就不多说了,开始今天的学习。
首先我们来讲下命名空间。
命名空间
对于命名空间,这是一个C中没有的东西,首先这里要提出一个问题,为什么会有命名空间呢?其实这个要归结到C语言的一些缺陷上来说,比如说,在你开发过程当中,多个全局变量重名了,如果在C当中,这是肯定无法编译过去的,所以这里,c++为了解决全局变量命名重名的问题,出现了命名空间。
我们在写C++中经常写的就是这样的一句话:
using namespace std;
这句代码其实就是我们对命名空间空间的使用。
在这里的std其实就是一个命名空间。
命名空间可以让我们对不同的重名数据进行使用。
#include<iostream> #include<cstdlib> using namespace std; namespace A { int a(50); } namespace run { int a(80); } int main() { cout << A::a << "--" << run::a << endl; system("pause"); return 0; }
比如上面这个程序,在C++当中,我们给了两个命名空间 A和run,这两个命名空间中的a就是重名的变量。在这里要说一个运算符,::域运算符,::是运算符中等级最高的。
using呢,其实也是一个关键字,这个关键字起到使用某个命名空间的作用。
using也是含有作用域的。c++是从上往下进行编译的,using的作用域也是从上往下,从using代码开始一直到代码结束,所以我们一般就把using放到上面,这样作用域就最大了。另外,要记住using所使用的命名空间,必须先定义好才行。
比如:
#include<iostream> #include<cstdlib> using namespace std; namespace A { int a(50); } using namespace run; namespace run { int a(80); } int main() { cout << A::a << "--" << run::a << endl; system("pause"); return 0; }
这样就是不行的,run命名空间必须先定义,再使用。
另外,如果我们是这样进行操作也是不行的。
#include<iostream> #include<cstdlib> using namespace std; namespace A { int a(50); } namespace run { int a(80); } using namespace run; using namespace A; int main() { cout << a << "--" << a << endl; system("pause"); return 0; }
这样就是对变量重名,会出现不明确的冲突,解决方法就是对各个变量加上各自的命名空间。
没有命名的命名空间可以进行直接的调用。
命名空间可以进行嵌套使用。
命名空间也可以直接进行赋值的。(给命名空间起别名)
例如:
#include<iostream> using namespace std; namespace run { char *str("atoi"); namespace abc { int a(20); } } namespace r = run; int main() { cout<<r::str<<endl<<r::abc::a<<endl; }
扩充命名空间:当命名空间不够,可以在外部进行命名空间的内容的添加。
也就是说命名空间在内部外部都可以进行添加。
例如:
#include<cstdlib> #include<iostream> using namespace std; namespace A { int a(50); } namespace A { char *str("atoi"); } int main() { cout << A::a << endl << A::str << endl; system("pause"); return 0; }
命名空间中尽量不要定义函数,在软件开发的过程当中,当要实现一个功能,当要改代码时,会比较费劲,一般对函数的操作更喜欢使用函数指针,让它指向外部的一个函数。这样代码的可维护性会变得更好。。
例如:
namespace run { double d(5.9); int a(50); int(*add)(int, int); } int add(int a, int b) { return a + b; }
这样,你对函数的功能如果进行修改就不会影响到其他模块。
namespace当中的所有的数据都是公有的。所有数据皆是共有的,不允许有私有的内容。而对于结构体来说默认是共有的。
命名空间与全局变量的差别:
例如:
#include<stdlib.h> #include<stdio.h> int a = 1; int main() { int a = 3; printf("%d", a); system("pause"); return 0; }
运行这一段代码,在C当中,没有办法让a输出1。而c++当中,只需要这样做:
#include<cstdlib> #include<iostream> int a = 1; int main() { int a = 3; std::cout<<::a; system("pause"); return 0; }
C语言当中没有办法引用全局变量。已经被屏蔽了。C出现重名,会无法引用全局变量。
在C++当中就可以使用域运算符,这时候把全局当作了一个域进行引用。
::前面什么都没有一般就是意味这全局。
最后要说其实有没有命名空间其实就是我们看c和c++的区别。
命名空间在软件开发过程当中主要应用于迭代式开发。
相关文章推荐
- JAVA C# C/C++之比教学:继承
- 【C/C++】二维数组之简易三子棋
- LeetCode Reverse Integer(C)
- 扩展欧几里德 noip 2012 day2 同余方程
- Rijndael用法,如何填充数据
- [C++]STL算法高效使用的一些建议
- c++之STL string
- C++ new失败的处理
- C++中如何理解cout endl
- windows多媒体定时器例程—C语言篇
- C++中换行endl和\n的区别
- C++11的新特性简单汇总介绍 (二)
- Cpp环境【POJ3259】【Vijos3036】虫洞
- ROS学习之cpp节点的启动与关闭
- 操作系统思考 第十一章 C语言中的信号量
- C++11的新特性简单汇总介绍 (一)
- July 17th 模拟赛C T2 Number Solution
- NYOJ 组合数问题
- July 17th 模拟赛C T1 Gift Solution
- 大数运算c++