C++ 60分钟入门教程 - 3、C++名字空间
来源:互联网 发布:菜单制作软件 编辑:程序博客网 时间:2024/05/29 18:58
名字空间的定义
名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“namespace”,使用名字空间时用符号“::”指定。- 不指定名字空间的变量或函数都是当前名字空间下的变量或函数。
- 不定义名字空间的情况下,都属于全局名字空间。
- 同一个名字空间可以定义多次。
名字空间定义和使用举例:
- #include <iostream>
- using namespace std;
- namespace na
- {
- void print(int n) { //与名字空间nb的函数名相同
- cout << "na::print: " << n << endl;
- }
- }
- namespace nb
- {
- void print(int n) { //与名字空间na的函数名相同
- cout << "nb::print: " << n << endl;
- }
- }
- namespace na // 同一个名字空间可以定义多次
- {
- void print2(int a, int b) {
- print(a);
- print(b);
- }
- }
- int main ( )
- {
- na::print(3); // 指定na下的print函数
- nb::print(4); // 指定na下的print函数
- na::print2(5, 6); // 指定na下的print2函数
- return 0;
- }
na::print: 3
nb::print: 4
na::print: 5
na::print: 6
using的使用
使用“using namespace”可以使得后面不需要每次指定名字空间,相当于java中的import功能。不过,多次使用“using namespace”时,被指定的名字空间同时有效,很容易冲突。
- #include <iostream>
- using namespace std;
- namespace na
- {
- void print(int a) {
- cout << "na::print: " << a << endl;
- }
- }
- namespace nb
- {
- using namespace na;
- void print2(int a, int b) { //这是nb自身的函数
- print(a); //na的函数
- print(b); //na的函数
- }
- void print(int n) { //这也是nb自身的函数
- cout << "nb::print: " << n << endl;
- }
- }
- namespace nc
- {
- using nb::print2; //指定只使用nb的print2()函数
- void print(int a, int b, int c) {
- print2(a, b); //这是nb的函数
- nb::print(c); //using中没有指定,所以这儿必须用nb::来指定
- }
- }
- int main ( )
- {
- using namespace na;
- print(2); //na的print()函数
- //using namespace nb; //这样使用时,na和nb同时有效
- //print(3); //编译系统不清楚究竟调用na和nb中的哪一个,因为函数名和参数相同
- using namespace nc; //这样使用时,na和nc同时有效
- print(4, 5, 6); //nc的print()函数的参数与na中的参数不同,所以这儿不出错。
- using nb::print; //指定下面用的print()函数是nb的函数
- print(7);
- return 0;
- }
na::print: 2
na::print: 4
na::print: 5
nb::print: 6
nb::print: 7
用别名指定名字空间
名字空间可以一层层嵌套,指定时也得一层层地指定,这样很不方便,一般用别名代替就方便多了。
- #include <iostream>
- using namespace std;
- namespace na {
- namespace nb {
- namespace nc {
- int sum(int a, int b)
- {
- return a + b;
- }
- }
- }
- }
- namespace A = na::nb::nc;
- int main ( )
- {
- cout << na::nb::nc::sum(5, 11) << endl;
- cout << A::sum(6, 12) << endl;
- return 0;
- }
16
18
没有名字的名字空间
名字空间的名字也可以省略,称之为“无名名字空间”,无名名字空间经常被使用,其作用是“内部可以引用,而外部不能引用”。
- #include <iostream>
- using namespace std;
- namespace na {
- namespace { //无名名字空间
- int sum(int a, int b)
- {
- return a + b;
- }
- }
- int calc(int x, int y)
- {
- return sum(x, y); //内部可以调用无名名字空间的变量或函数
- }
- }
- int main ( )
- {
- //cout << na::sum(5, 11) << endl; //因为缺少里面的名字,所以外部不能调用
- cout << na::calc(6, 12) << endl;
- return 0;
- }
18
1 0
- C++ 60分钟入门教程 - 3、C++名字空间
- Objective-C 30分钟入门教程
- Objective-C 30分钟入门教程
- C++——名字空间
- C#:正则表达式30分钟入门教程
- C#:正则表达式30分钟入门教程
- C#:正则表达式30分钟入门教程
- C 语言中的名字空间(namespace)
- C++ 60分钟入门教程 - 2、C++与C语言的区别
- c语言标识符的名字空间和作用域
- C++:C++背景、名字空间、结构联合枚举、字符串类型
- C和C++中的名字空间和作用域
- C和C++中的名字空间和作用域
- 读书笔记-Thinking in C++-第10章 名字空间namespace
- C/C++:命名空间
- 3分钟了解C语言是什么
- c延迟1分钟
- C语快速入门教程(3)
- Dede小企业网站开发流程及常用标签(一)
- hdu 3405 World Islands(最小生成树)
- poj 1330
- 模拟IC芯片设计开发的流程
- 酌坐追锥注最滓租鬃状啄卒壮邹着邹揍酌
- C++ 60分钟入门教程 - 3、C++名字空间
- 籽资赚坠拽尊坐鬃总滓坐左赚赘足撰椎砖
- 《数据结构》第二章线性表学习总结
- 使用 /sys 文件系统访问 Linux 内核
- VC关于windows服务状态更改
- vijos P1755 靶形数独
- Windows服务编写
- 程序员的进步从阅读自己的老代码开始
- 邹足纵谞捉着椎佐注赚醉左总滓综滋缀做