🥥嵌套类和局部类
2022-5-15
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

嵌套类

一个类可以定义在另外一个类中,这样的类成为嵌套类(nested class),或者叫嵌套类型(nested type)。嵌套类最常用于定义实现类。
嵌套类有这样一些性质:
  1. 嵌套类的名字只在其外围类内可见,在类外使用时,需要加作用域
  1. 嵌套类可以直接引用外围类的静态成员、类名和枚举成员,不需要加作用域;
  1. 继承一个嵌套类时,被继承的嵌套类类名需要加作用域
 
 
 
嵌套和外围类是独立的,尽管嵌套类定义在外围类的内部,嵌套类对象与外围类对象之间没有必然的联系。嵌套类对象只包含它自己定义的成员,外围类对象也只包含它自己定义的成员,它不能直接访问嵌套类中的数据成员。
嵌套类是外围类的友元外围类对嵌套类没有访问特权:
 
让外围类成为嵌套类的友元:
 
 
 
 
在外围类外部定义嵌套类
嵌套类必须在外围类的内部声明,但是定义可以放在外围类的外部。当在外围类的外部定义嵌套类时,必须同时用外围类名和嵌套类名进行限定。如:
这里QueryResult的构造函数也不是定义在类体内,必须将构造函数用外围类和嵌套类名进行限定。
 
嵌套类的静态成员定义
在类外定义如下:
 
 
 

局部类

类可以定义在函数体内,这种类被称为局部类(local class):
 
本地类定义了一个只能在其被定义的作用域中可见的类型,与嵌套类不同在于,局部类的成员十分受限。
 
 
局部类的所有成员(包括函数)都必须在类体内定义:
 
 
局部类不能包含静态数据成员,但可以包含静态函数:
局部类成员方法在函数中的访问权限受限,局部类的成员函数只能访问函数中的静态变量以及枚举变量,无法访问非静态变量。
 
 
局部类可以访问全局类型,变量和函数。另外,局部类可以访问同一个函数中的其它局部类。
 
 
本地类运用正常的保护规则
外围函数无权访问局部类的私有成员,当然,局部类可以将外围函数设置为友元,而本地类更常见的做法是将其成员设置为 public 的,可以访问局部类的程序部分是是否受限的,只能在外围函数中访问。局部类本身已经被封装在了函数的作用域中,如果再通过信息隐藏去封装就是多此一举了。
 
本地类中的名称查找
发生在本地类体中的名称查找与别的类中的名称查找没什么两样。成员声明中使用到的名字必须是之前出现过的,定义成员则无先后关系,这是由类的两步处理导致的结果。如果名字无法在类中找到,那么就会继续查找外围函数和外围函数的外部作用域。
 
嵌套局部类
可以在局部类中再嵌套类。这个嵌套类可以在局部类体的外部进行定义,但是嵌套类必须与本地类在同一个作用域中定义,意味着必须定义在同一个函数中:
本地类的嵌套类也是本地类,遵循本地类的所有规则。
  • C++
  • 枚举类型union:一种节省空间的类
    目录