C++命名空间
来源:互联网 发布:手游java服务器端开发 编辑:程序博客网 时间:2024/05/17 06:00
好久没写博客了,现在也开始了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++的区别。
命名空间在软件开发过程当中主要应用于迭代式开发。
- 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++ 命名空间
- BSC
- 编程珠玑第八章-算法设计技术
- 基本正则~
- 快捷键让SublimeText在编文件快速在浏览器打开
- iOS 中的常用设计模式总结
- C++命名空间
- 更改C#项目的命名空间名称
- ROS学习之 cpp消息
- Git可视化极简易教程 — Git GUI使用方法
- 百度提取码查看
- XZ_HTML之HTML表格
- 算法导论之平摊分析(动态表)
- java知识复习1
- 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central