C++初级主题--名字空间域和类域
一.序
在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++初级主题--名字空间域和类域相关推荐
- 名字空间:namespace
在C++中支持三种域:局部域.名字空间域和类域. 名字空间域是随标准C++而引入的.它相当于一个更加灵活的文件域(全局域),可以用花括号把 文件的一部分括起来,并以关键字namespace开头给它起一 ...
- C++ 名字空间详解
代码编译运行环境:VS2017+Win32+Debug 1.名字空间的由来 名字空间(Namespace)是由 C++ 引入的一种新的作用域级别,可以由用户命名,用来处理程序中常见的同名冲突. 原来 ...
- C++ 名字空间(namespace)
C++支持多种作用域:全局域.局部域.块域.类域,还有名字空间域等. 作用域:规定变量能够被访问的范围,离开这个范围的变量不能被访问. 作用域是一个独立的地盘,让变量不会暴露出去,也就是说作用域最大的 ...
- C++:名字空间的使用
首先明确一下要使用名字空间的目的是为了防止名字冲突. 一.访问名字空间中元素的3种方式: 1.可以自己去定义一些名字空间: namespace NameSpace1 {void fun(){}//该f ...
- Qt中Ui名字空间以及setupUi函数的原理和实现
Qt中Ui名字空间以及setupUi函数的原理和实现 分类: Qt GUI 2012-03-08 15:38 10514人阅读 评论(4) 收藏 举报 uiqtsignalclassdelete 用最 ...
- C++之访问命名空间/名字空间元素的三种方式
一.域解析符:: 二.using 语句 第一种 第二种 三.名字空间别名
- 名字空间的含义及作用
名字空间是为了防止名字污染在标准 C++ 中引入的. 它可以将其中定义的名字隐藏起来,不同的名字空间中可以有相同的名字而互不干扰,使用时用域操作符(::)来引用. namespace 名字 { ...
- C++的名字空间(很重要)
一.什么是名字空间? C++中对函数.变量.类型进行逻辑上的划分,避免同名的标识符重定义. 当我们在处理非常庞大复杂的项目时,不可避免地需要多人共同合作,可是人一多,取出来的名字难免重复,于是就会发生 ...
- C++中的名字空间和作用域
C++中的名字空间和作用域 C++程序支持四种形式的作用域,分别是: ①:名字空间作用域 ②:局部作用域 ③:类作用域 ④:语句作用域 名字空间作用域:就是程序员利用名字空间定义在C++程序中划分出来 ...
最新文章
- 1.1 Java流是什么?输入/输出流又是什么?
- git生成SSH-Key
- 微信小程序之视图容器(swiper)组件创建轮播图
- VirtualBox 虚拟机复制
- response.setcontenttype的參数
- VB如何快带比较两幅位图
- Linux下Oracle新建一个数据库、启动多实例数据库
- python因子分析 ic值 函数_spss问卷调查因子分析定义变量及内容输入
- MATLAB 四点定球及三点定圆(完整代码)
- 微信小程序开发资源汇总 awesome-wechat-weapp
- HP笔记本电源灯亮不能开机 - 静电问题
- java计算机毕业设计在线交友系统2021源码+mysql数据库+系统+lw文档+部署
- C语言(二级基础知识2)
- 什么是 DDoS?完整指南
- FPGA 使用PCIE高速接口
- efm8bb1 烧录器_EFM8BB1LCK全功能、低成本8位MCU套件开箱评测
- 【完美解决win10 安装 vm 报错 failed to install USB inf file failed to install the hcmon driver】
- 小学英语阅读促进学生思维品质发展及其策略应用的综述
- 全球及中国动力电池行业研发方向与未来发展走势研究报告2022版
- 亲测好用的Odoo集成X-SpreadSheet方法!