嵌套类型
嵌套类型 (nested type)在另一个类型的范围内定义的类型。嵌套类型通常用于封装顶级类型的实现细节。
嵌套类型是作为某其他类型的成员的类型。嵌套类型应与其声明类型紧密关联,并且不得用作通用类型。有些开发人员会将嵌套类型弄混淆,因此嵌套类型不应是公开可见的,除非不得不这样做。在设计完善的库中,开发人员几乎不需要使用嵌套类型实例化对象或声明
变量。
在声明类型使用和创建嵌套类型实例时,嵌套类型很有用,但不在公共成员中公开嵌套类型的使用。
如果嵌套类型和其外部类型之间的关系需要成员可访问性语义,则要使用嵌套类型。由于嵌套类型被视为是声明类型的成员,因此嵌套类型可以访问声明类型中的所有其他成员。
不要将公共嵌套类型用作逻辑分组构造;请改用命名空间。
避免公开显露嵌套类型。唯一的特例是需要声明嵌套类型的变量的情况,在生成子类或其他高级自定义等极少数情况下需要声明嵌套类型的变量。
如果需要由客户端代码实例化类型,则不要使用嵌套类型。如果某种类型具有公共
构造函数,就可能不应进行嵌套。理想情况下,嵌套类型仅由它的声明类型进行实例化和使用。如果嵌套类型具有公共
构造函数,则表示该类型不单由其声明类型使用。通常情况下,嵌套类型不应针对其声明类型以外的类型执行任务。如某种类型具有更广泛的用途,就很可能不应进行嵌套。
不要将嵌套类型定义为接口的成员。许多语言不支持这样的构造。C++示例:
将某个类的定义放在另一个类的内部,这样的类定义,叫嵌套类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
class
A
{
public
:
//嵌套类的可访问性取决于是public还是protected或者private,嵌套类不能使用对象访问。
//嵌套类不是数据成员。
class
B
{
public
:
int
data;
friend
class
A;
void
show(){}
};
private
:
//类外不可访问
class
C
{
int
data;
friend
class
B;
void
show(){}
};
void
func()
//B,C都可以访问。
{
B test1;
C test2;
}
};
int
main(
int
argc,
char
const
*argv[])
{
//不能访问C
A::B t;
return
0;
}
|