一.序

在C++中支持三种域:局部域、名字空间域和类域。

二.名字空间域

1.名字空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字:

namespace  ns1{float a,b,c;fun1(){……}… }

花括号括起来的部分称声明块。声明块中可以包括:类、变量(带有初始化)、函数(带有定义)等。在域外使用域内的成员时,需加上名字空间名作为前缀,后面加上域操作符“::” 。这里添加了名字空间名称的成员名被称为限定修饰名(qualified name)。如:ns1::a,ns1::fun1()等等。
最外层的名字空间域称为全局名字空间域(global namespace scope),即文件域。

2.名字空间域可分层嵌套,同样有分层屏蔽作用。例如:

namespace cplusplus_primer{namespace Matrixlib{    //名字空间嵌套class matrix{……}    //名字空间类成员matrix…...   }  }

访问matrix,可写:cplusplus_primer::Matrixlib::matrix 。
使用using声明可只写一次限定修饰名。using声明以关键字using开头,后面是被限定修饰的(qualified)名字空间成员名:

using cplusplus_primer::Matrixlib::matrix;//名字空间类成员matrix的using声明

以后在程序中使用matrix时,就可以直接使用成员名,而不必使用限定修饰名。

3.使用using指示符可以一次性地使名字空间中所有成员都可以直接被使用,比using声明方便。using指示符以关键字using开头,后面是关键字namespace,然后是名字空间名。
标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。在采用标准C++的平台上使用标准C++库中的组件,只要写一个using指示符:
using namespace std;
就可以直接使用标准C++库中的所有成员。这是很方便的。
名字空间可以不连续,分为多段,但它们仍是同一个名字空间。名字空间域不能定义在函数声明、函数定义或类定义的内部。

4.名字空间域的引入,主要是为了解决全局名字空间污染(global namespace pollution)问题,即防止程序中的全局实体名与C++各种库中声明的全局实体名冲突。

三.类域

1.类体也定义了一个域称为类域。在类域中说明的标识符仅在该类的类域内有效。必须加上“类名::”作限定修饰。
2.类的实体——对象中的公有成员也可以在对象之外访问,但必须使用成员访问操作符“.”,对象名+“.”+成员名
3.定义类本身的目的就是要实现一个封装性,对外是封闭的,对内是开放的,在程序中并不总是需要用成员访问符之类来引用类成员。多数程序代码本身就在类域中,这些程序可以直接访问类成员。
4.####在类域中类成员在类体中被声明的顺序同样很重要,后声明的成员不能被先声明的成员引用。

编译器对名字(标识符)的解析分两步

第一步查找在声明中用到的名字,包括数据成员和函数成员声明中用到的参数类型,第二步才是函数成员体内的名字。例如:

class  string
{   //字符串类
public:typedef  int  index_type;//为易读易懂用下标型命名char  GetstringElement(index_type elem) {return Astring[elem];}  // Astring未说明
private:char   Astring[30];  //Astring后说明
};

表面上看是错的;实际上是对的。因为Astring名字的解析是在第一步,而内联函数使用它是在第二步。

四.总结

这一篇主要阐述一下名字空间域,类域,作用域限定符等问题,为后续开展阅读源码的工作做准备,马上将会讲述C++标准库中的数据结构

C++初级主题--名字空间域和类域相关推荐

  1. 名字空间:namespace

    在C++中支持三种域:局部域.名字空间域和类域. 名字空间域是随标准C++而引入的.它相当于一个更加灵活的文件域(全局域),可以用花括号把 文件的一部分括起来,并以关键字namespace开头给它起一 ...

  2. C++ 名字空间详解

    代码编译运行环境:VS2017+Win32+Debug 1.名字空间的由来 名字空间(Namespace)是由 C++ 引入的一种新的作用域级别,可以由用户命名,用来处理程序中常见的同名冲突. 原来 ...

  3. C++ 名字空间(namespace)

    C++支持多种作用域:全局域.局部域.块域.类域,还有名字空间域等. 作用域:规定变量能够被访问的范围,离开这个范围的变量不能被访问. 作用域是一个独立的地盘,让变量不会暴露出去,也就是说作用域最大的 ...

  4. C++:名字空间的使用

    首先明确一下要使用名字空间的目的是为了防止名字冲突. 一.访问名字空间中元素的3种方式: 1.可以自己去定义一些名字空间: namespace NameSpace1 {void fun(){}//该f ...

  5. Qt中Ui名字空间以及setupUi函数的原理和实现

    Qt中Ui名字空间以及setupUi函数的原理和实现 分类: Qt GUI 2012-03-08 15:38 10514人阅读 评论(4) 收藏 举报 uiqtsignalclassdelete 用最 ...

  6. C++之访问命名空间/名字空间元素的三种方式

    一.域解析符:: 二.using 语句 第一种 第二种 三.名字空间别名

  7. 名字空间的含义及作用

    名字空间是为了防止名字污染在标准 C++ 中引入的. 它可以将其中定义的名字隐藏起来,不同的名字空间中可以有相同的名字而互不干扰,使用时用域操作符(::)来引用. namespace 名字 {    ...

  8. C++的名字空间(很重要)

    一.什么是名字空间? C++中对函数.变量.类型进行逻辑上的划分,避免同名的标识符重定义. 当我们在处理非常庞大复杂的项目时,不可避免地需要多人共同合作,可是人一多,取出来的名字难免重复,于是就会发生 ...

  9. C++中的名字空间和作用域

    C++中的名字空间和作用域 C++程序支持四种形式的作用域,分别是: ①:名字空间作用域 ②:局部作用域 ③:类作用域 ④:语句作用域 名字空间作用域:就是程序员利用名字空间定义在C++程序中划分出来 ...

最新文章

  1. 1.1 Java流是什么?输入/输出流又是什么?
  2. git生成SSH-Key
  3. 微信小程序之视图容器(swiper)组件创建轮播图
  4. VirtualBox 虚拟机复制
  5. response.setcontenttype的參数
  6. VB如何快带比较两幅位图
  7. Linux下Oracle新建一个数据库、启动多实例数据库
  8. python因子分析 ic值 函数_spss问卷调查因子分析定义变量及内容输入
  9. MATLAB 四点定球及三点定圆(完整代码)
  10. 微信小程序开发资源汇总 awesome-wechat-weapp
  11. HP笔记本电源灯亮不能开机 - 静电问题
  12. java计算机毕业设计在线交友系统2021源码+mysql数据库+系统+lw文档+部署
  13. C语言(二级基础知识2)
  14. 什么是 DDoS?完整指南
  15. FPGA 使用PCIE高速接口
  16. efm8bb1 烧录器_EFM8BB1LCK全功能、低成本8位MCU套件开箱评测
  17. 【完美解决win10 安装 vm 报错 failed to install USB inf file failed to install the hcmon driver】
  18. 小学英语阅读促进学生思维品质发展及其策略应用的综述
  19. 全球及中国动力电池行业研发方向与未来发展走势研究报告2022版
  20. 亲测好用的Odoo集成X-SpreadSheet方法!

热门文章

  1. 51单片机和Arduino有什么区别?
  2. kubernetes入门实战
  3. ERP系统有哪些品牌?
  4. 【小样本分割 2020 ICCV】PANet
  5. Collada 快速入门
  6. SAS:字符串常用函数简介
  7. 常用加密与解密算法示例代码
  8. python—基础练习2
  9. 磨刀不误砍材工 - Java的基础语言要素(从变量/常量切入,看8种基本数据类型)
  10. 双系统下卸载Ubuntu方法