系列文章目录
本篇文章呢主要说的是C++中关于命名空间相关知识点哦~
文章目录
- 一、C++简单介绍
- 二、详解
- 1.命名空间
- 2.输入输出
- 总结
一、C++简单介绍
前面我们学习的C语言,它是结构化和模块化的语言,适合处理较小规模的程序。那么,对于一些复杂的问题,规模比较大的程序,需要高度的抽象和建模时,对C语言而言就是块烫手山芋,不太合适的哦。那么,既然有了这个问题,必然会有降服它的办法。为了解决软件危机,在20世纪80年代的时候,计算机界提出了OOP思想(面向对象思想),支持面向对象的程序设计语言应运而生。
1982年,我们接下来会用到的这个语言,是Bjarne Stroustrup博士在C语言的基础上引入并且扩充了面向对象的概念,发明了一种新的语言,即C++;所以,C++是基于C语言而生的。它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。
二、详解
1.命名空间
命名空间的产生?
在刚开始学校C++的时候,去看C++的代码,是不是往往会看到很多代码中有这条语句:
using namespace std;
那这句话是什么意思呢?它表明使用了C++官方库定义的命名空间。那一问究竟,什么是命名空间,又为什么需要这个命名空间呢?接下来我们一探到底……
(1)什么是命名空间?
它实质上其实就是一个由程序设计者命名的内存区域,为了防止名字冲突从而引入的一种机制。换句话说,就相当于一个灵活的文件域。
注:
(1)
在域外使用域内成员时,需要加上命名空间名作为前缀,再加上域操作符“::”,这样的话就可以使用嵌套定义了。(2)如果在关键字namespace的前面使用using,那么就没有必要使用限定修饰名,也就是说可以一次性使命名空间中的所有成员都可以直接被使用。
强调!!!
如果使用命名空间std的话,那么#include编译预处理命令包含头文件的时候,可最好就不要再把.h加到后面啦,去掉会更好一些~
#include<iostream.h> using namespace std; int main() { count << "hello" << endl; getchar(); }
看好啦,这个就是在很老很老的编译器上才会有的哦!
在这里对命名空间再啰嗦几点说明:
(1)系统中可以定义多个命名空间,每个命名空间都是有它自己的名字的,是不可以同名的。
(2) 我们把命名空间不要想的有多神奇,我们就把它看成一个作用域,如果我们在这个命名空间里定义的函数与另外一个命名空间里的函数就算是同名也没啥影响的哦~
(3)命名空间它的定义呢是可以不连续的,甚至说可以写在多个文件中。
a:假如说之前没有定义这个命名空间的话,那么namespace 命名空间名 就相当于是重新定义了一个新的命名空间。
b:假如说在之前就已经定义了这个命名空间的话,那么namespace 命名空间名 就相当于是打开已经存在的命名空间并且为其添加新成员的声明。
(4)这里呢,命名空间是不影响内存布局的。
(2)命名空间的定义
前面已经提到了,格式为:namespace 命名空间名,然后再跟一对{ }即可,{ } ---->里面是命名空间的成员。
1.正常的命名空间定义
// 1. 正常的命名空间定义 namespace zry { // 命名空间中可以定义变量/函数/类型 int rand = 100; int Add(int left, int right) { return left + right; } struct Node { struct Node* next; int val; }; }
2.命名空间可以嵌套
//命名空间可以嵌套 namespace N1 { int a; int b; int Add(int left, int right) { return left + right; } namespace N2 { int c; int d; int Sub(int left, int right) { return left - right; } } }
3.同一个工程中允许存在多个相同名称的命名空间,编译器它在最后的时候会合成同一个命名空间。
//比如说这里test.h与test.cpp中的两个N1会合并成一个。
// test.h namespace N1 { int Mul(int left, int right) { return left * right; } } //test.cpp namespace N1 { int a; int b; int Add(int left, int right) { return left + right; } namespace N2 { int c; int d; int Sub(int left, int right) { return left - right; } } }
注意哦:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于这个命名空间中。
(3)命名空间的使用方式
在这里呢,我们介绍三种关于命名空间的使用方式:
a:指定它属于该命名空间
namespace N { int printf = 50; int strstr = 100; } int main() { printf("%d\n",N::strstr); printf("%d\n",N::printf); system("pause"); return 0; }
就看上面这段代码,用namespace直接指定,然后搭配域作用限定符就🆗啦!(域作用限定符——> ::)
b:使用using namespace 命名空间名称引入
namespace N { int printf = 50; int strstr = 100; } using namespace N; int main() { printf("%d\n", N::strstr); printf("%d\n", N::printf); system("pause"); return 0; }
这段代码中,就是使用using namespace之后,相当于把N中的内容全部展开在全局作用域中,可是当年去运行这段代码的时候其实是跑不过的,因为这里面的内容有可能会和其他东西产生冲突,就比如说关键字和函数名之类的,所以,非特殊情况的话,一般不建议用这样的方式哦~
那既然有它的出现,肯定会遇到需要用到它的情况吧~
看这段代码,此时,当你定义的是很简单的但是不会产生冲突的变量时,就是可以使用using namespace的了~
namespace N { int m = 100; } using namespace N; int main() { printf("%d\n", m); printf("%d\n", N::m); system("pause"); return 0; }
c:使用using将指定的命名空间中成员引入
namespace N { int m = 10; int zry = 20; } using N::m; int main() { printf("%d\n", m); printf("%d\n", N::zry); system("pause"); return 0; }
在这段代码中,有了using这个用法,就指定只展开m。
总结
以上就是本篇文章介绍的关于C++的简单介绍以及命名空间的内容。新手一枚,如有错误,欢迎各位友友评论区留言哦~~~