的数据项就是通用类中的形参 。 对通用类的形参进行限制 , 就可以使形参类型成
为普通类的子类。要注意的是:声明一个通用类并没有创建一个新的类类型 , 而
只是定义了一种适用于几个普通类的通用形式 。 然后 , 赋予通用类型信息对该通
用类进行实例化 。 通用类被实例化时 , 它的形参类型由实参类型 ( 基本类型或基
本类 ) 替代 。 实例化结束后 , 就创建出一个新的类 。 新类可以由用户在实例化声
明中任意命名。按惯例,通用类的实例名通常由通用类名和实参类型名组成 。 至
于通用类的名字 , 只需在其本身名字前添加一个前缀 ( 该通用类所在包的名字 ) 。
例 2.1 :
class Array1OfReal instantiates Array1 from TCollection (Real);
这个声明位于 TColStd 包的一个 CDL 文件中。它定义了一个新的 类
TColStd_Array1OfReal
。该类是通用类
TCollection_Array1
的一个实例,并且参
数类型指定为实型。
从具有相同形参类型的相同通用类中 , 可以实例化出不止一个类 。 这些实例
化出来的类通过各自的实现来识别。其实在
C++
中,它们已经不属于同一类了
。
另外,我们不能从通用类中派生类。
在由通用类获得的泛化中 , 我们经常发现许多类由一个共同的通用类型联系
着 。 这种现象发生在一种基本结构供给迭代器的时候 。 在这种情况下 , 有必要弄
清一件事,那就是由相关通用类构成的团体的确用于同一对象类型的实例化 。 为
了使这个实例化过程成为一整体 , 可以将一些通用类声明为内嵌类 。 这样的通用
类就叫内嵌通用类。
一旦主通用类被实例化 , 它的内嵌类也将被实例化 。 内嵌类的实例名由内嵌
类名字和主通用类名字组成,通过 “ Of ” 连接。
例
2.2
:
class MapOfReal instantiates Map from TCollection (Real,MapRealHasher);
这个声明位于 TColStd 中 。 它不仅定义了 TColStd_MapOfReal 类 , 也定义 了
TColStd_MapIteratorOfMapOfReal 类(该类是通用类 TCollection_Map 的内嵌 类
MapIterator
的一个实例 ) 。内嵌类的实例独立于主类的实例,而决非绑定于它。
作为内嵌类,即使它们本身不是通用类,但是内嵌于通用类,它们也是通用的 。
1.2.2 数据类型的分类
数据类型是作为类被实现的 。 类不仅定义了它的数据结构和基于它的实例的
方法,也声明了该实例的处理方式。
评论30
最新资源