C++初级主题--名字空间域和类域
来源:互联网 发布:火车票中转查询软件 编辑:程序博客网 时间:2024/06/01 09:05
一.序
在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++初级主题--名字空间域和类域
- C和C++中的名字空间和作用域
- C和C++中的名字空间和作用域
- 名字空间和域解析
- c语言标识符的名字空间和作用域
- C#中的类和名字空间
- C++——名字空间
- 在名字空间中声明类和成员函数
- 在名字空间中声明类和成员函数
- C 语言中的名字空间(namespace)
- 名字,作用域和约束
- 【C++】名字查找与类的作用域
- 3.3.5 - [basic.scope.namespace] - 【基本.作用域.名字空间】
- UNIX域套接字中的抽象名字空间
- 对C++的基本认识之名字空间域
- 名字空间
- 名字空间
- 名字空间
- 设计模式之单例模式(Singleton)
- C语言------野指针
- P1074 靶形数独(TLE 75)
- CodeForces 763A Timofey and a tree
- FPGA学习20170205-开发指南(译)-Page1
- C++初级主题--名字空间域和类域
- 写在前面-第一篇csdn博客
- 第一个HelloWorld程序,遇到java.lang.RuntimeException: Unable to start activity ComponentInfo
- webservice--CXF+Spring整合发布SOAP协议的服务
- HTTP客户端识别与Cookie机制
- html学习第一天
- linux(Ubuntu)下编译openJDK
- js中创建对象的几种方式
- Delphi QuickReport 分组— QRGroup