> 教育经验 > 什么是嵌套类型介绍

什么是嵌套类型介绍

什么是嵌套类型介绍

嵌套类型 在另一个类型的范围内定义的类型。嵌套类型通常用于。

术语解释

嵌套类型是作为某其他类型的成员的类型。嵌套类型应与其声明类型紧密关联,并且不得用作通用类型。有些开发人员会将嵌套类型弄混淆,因此嵌套类型不应是公开可见的,除非不得不这样做。在设计完善的库中,开发人员几乎不需要使用嵌套类型实例化对象或声明变量。

在声明类型使用和创建嵌套类型实例时,嵌套类型很有用,但不在公共成员中公开嵌套类型的使用。

如果嵌套类型和其外部类型之间的关系需要成员可访问性语义,则要使用嵌套类型。由于嵌套类型被视为是声明类型的成员,因此嵌套类型可以访问声明类型中的所有其他成员。

不要将公共嵌套类型用作逻辑分组构造;请改用命名空间。

避免公开显露嵌套类型。唯一的特例是需要声明嵌套类型的变量的情况,在生成子类或其他高级自定义等极少数情况下需要声明嵌套类型的变量。

如果可能在声明类型的外部引用类型,则不要使用嵌套类型。在常见方案中,不应要求对嵌套类型进行变量声明和对象实例化。例如,处理在某一类上定义的事件的事件处理程序委托不应嵌套在该类中。

如果需要由客户端代码实例化类型,则不要使用嵌套类型。如果某种类型具有公共构造函数,就可能不应进行嵌套。理想情况下,嵌套类型仅由它的声明类型进行实例化和使用。如果嵌套类型具有公共构造函数,则表示该类型不单由其声明类型使用。通常情况下,嵌套类型不应针对其声明类型以外的类型执行任务。如某种类型具有更广泛的用途,就很可能不应进行嵌套。

不要将嵌套类型定义为接口的成员。许多语言不支持这样的构造。C++示例:

将某个类的定义放在另一个类的内部,这样的类定义,叫嵌套类

classA{public://嵌套类的可访问性取决于是public还是protected或者private,嵌套类不能使用对象访问。//嵌套类不是数据成员。classB{public:intdata;friendclassA;voidshow(){}};private://类外不可访问classC{intdata;friendclassB;voidshow(){}};voidfunc()//B,C都可以访问。{Btest1;Ctest2;}};intmain(intargc,charconst*argv){//不能访问CA::Bt;return0;}this::B::b;//作用域访问嵌套类的方式,b应该是一个静态数据成员。pb->b;//在封装类定义嵌套类的指针,也可以访问friendA;//私有时定义为友元也可以访问对像的访问:aa.pb->showB();//指针群20072918