【博文连载】C++中的“命名空间”

命名空间主要解决命名冲突的问题。命名空间可以存放类、对象、函数、变量、结构体等。假如要使用命名空间中的变量或者对象,那么使用using namespace来指定某个命名空间,释放该命名空间中所有的变量或对象等。如果不想将它们全部从命名空间中释放出来,而是只使用该空间中某个特定的变量,那么使用命名空间加作用域解析符::指定该变量。如:

#include<iostream>
using namespace std;              //  释放std命名空间所有变量、函数等 namespace people {     char name[10]="Jack"; } int main() {     cout << "name:" << people::name << endl;     getchar();                   //  等待键盘输入字符     return 0; }

关于全局变量和局部变量的使用,如:

#include<iostream> using namespace std; int x = 1;          //  定义一个int型的全局变量x int main() {     int x = 2;      //  定义一个int型的局部变量x     cout << "输出全局变量:x=" << ::x << endl;  //  引用全局变量时使用作用域解析符::     cout << "输出局部变量:x=" << x << endl;     getchar();      //  等待键盘输入字符     return 0; }

创建命名空间时需要注意一些细节:

(1)同一个命名空间可以多次重复创建,以扩充命名空间的内容。

#include<iostream> using namespace std; namespace people {     char name[10] = "Jack"; } namespace people {     int age = 18; } int main() {     cout << "name:" << people::name << endl;     cout << "age:" << people::age << endl;     getchar();      //  等待键盘输入字符     return 0; }

(2)尽量在命名空间之外定义函数,命名空间内只做函数声明。这样做有两个好处:第一,保持命名空间的整洁性;第二,有利于将命名空间专门存放于头文件中,而将函数的定义部分存放于实现文件中。

#include<iostream> using namespace std; namespace func {     void display(); } int main() {     func::display();     getchar();     return 0; } void func::display() {     cout << "hello C++!!!" << endl; }

(3)命名空间中的成员都是公有的,不能将它们私有化。并且只能以创建命名空间的方式添加新成员,而不能像定义对象或使用限定符的方式定义新成员。以下几种情况是错误:

namespace func {     private:         void display(){cout << "Hello OpenCV" << endl;} } func x; int func::x;

(4)一个命名空间可以嵌套在另一个命名空间。

如果只是想释放命名空间中的某些变量,可以这么做:

#include<iostream> using namespace std; namespace num1 {     int x = 10;     int y = 20; } namespace num2 {     int x = 30;     int y = 40; } int main() {     using num1::x;     using num2::y;     cout << "x=" << x << " y=" << y << endl;     getchar();     return 0; }

可以为命名空间取个别名,如:

namespace people {     char name[10] = "Jack"; } namespace person = people;

 招聘信息 

 

(0)

相关推荐

  • C++:引用的简单理解

    前言:引用是C++一个很重要的特性,最近看了很多有关引用的资料和博客,故在此对引用的相关知识进行总结 一.什么是引用 引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作 ...

  • 【博文连载】中值滤波算法的介绍

    言归正传,我们先挑一个相对最简单的滤波算法(其实均值滤波更简单,但是它对边缘的保持太差,那就稍微努力点用中值滤波吧).进行中值滤波不仅可以去除孤点噪声,而且可以保持图像的边缘特性,不会使图像产生显著的 ...

  • 【博文连载】C++中的“栈与堆”

    一般来说,写程序就是与数据打交道,在执行程序某一功能的时候,将该功能所需要的数据加载到内存中,然后在执行完毕的时候释放掉该内存. 数据在内存中的存放方式有以下几种: (1)栈区--由编译器自动分配并且 ...

  • 【博文连载】C++中的“指针”

    指针是用来保存内存地址的变量.每个被定义的变量都有自己的地址,可以用指针来存放任何被定义的变量的地址.如(p存放的是变量的地址,*p存放的是变量的数据.): int a;  //  定义一个整型变量a ...

  • 【博文连载】C++中的“引用”

    引用就是别名,如下,rnum是num的别人,对rnum的操作实际就是对num的操作.这里的&是引用运算符,不是取址运算符. int num = 1;int &rnum=num; 还可以 ...

  • 【博文连载】DDR3中的ODT动态模式详解

    首先举一个例子: 早期的DDR(注:DDR2开始支持ODT功能),当向内存写入数据时,如果只有一条内存,那么这条内存就自己进行信号的终结,终结电阻等效为150Ω.如果为两条内存,那么他们会交错的进行信 ...

  • 【博文连载】PCIe扫盲——PCI总线中的Reflected-Wave Signaling

    PCI Spec规定了每个PCI总线上最多可以连接多达32个PCI设备,但是实际上却远远达不到32个,33MHz的32位PCI总线一般只能连接10到12个负载. 注:如果使用插槽连接,则一个连接算两个 ...

  • 襄博文物 |平中见奇——青釉狮塑瓷盏

    隋朝的短暂统一,结束了三国两晋南北朝时期长期混乱分裂的局面,为瓷器的发展创造了条件,这一时期的瓷器烧造在中国陶瓷史上也起着承上启下的作用.如白瓷的成功烧造.北方瓷窑的扩大等,为唐代瓷业"南青 ...

  • 【博文连载】动态Sobel阀值的HDL实现

    完美是没有极限的,前面我们已经实现了固定阀值下,图像的边缘检测结果.不过如何能手动输入,或者控制阀值的大小,那其实更完美一点点. 既然我们能够在努力一点点,为何要放弃??? OK,Bingo这里打算教 ...

  • 【博文连载】Sobel边缘检测算法的HDL实现

    FPGA中针对以上矩阵进行算法移植.由于直接计算会因为负值而得到错误的结果,用补码表示比较繁琐,需要用到unsigned 以及signed类型,不适合FPGA的运算. cnblog有真oo无双的代码, ...