嵌套类(嵌套类、结构和枚举的作用域特征——图)
来源:互联网 发布:win7指纹加密软件 编辑:程序博客网 时间:2024/04/29 09:45
嵌套类
在另一个类中声明的类被称为嵌套类(nested class),它通过提供新的类型类作用域来避免名称混乱。包含类的成员函数可以创建和使用被嵌套类的对象;而仅当声明位于公有部分,才能在包含类的外面使用嵌套类,而且必须使用作用域解析操作符。
class Queue
{
// class scope definitions
// Node is a nested class definition local to this class
class Node
{
public:
Node():
};
...
};
定义嵌套类的方法,必须指出Node类是在Queue类中定义的:
Queue::Node::Node(){...}
嵌套类和访问权限
1.作用域
如果嵌套类是在另一个类的私有部分声明的,则只有后者知道它。比如上面的Node类就是声明在Queue类的私有部分(类的默认访问权限是私有),因此Queue成员可以使用Node对象和指向Node对象的指针,但是程序的其他部分甚至不知道Node类的存在。
对于从Queue类派生而来的类,Node类也是不可见的,因为派生类不能直接访问基类的私有部分。
如果嵌套类是在另一个类的保护部分声明的,则它对于后者来说是可见的。,但是对于外部世界则是不可见的。不过这时,Queue的派生类将知道嵌套类,并可以直接创建这种类型的对象。
如果嵌套类是在另一个类的公有部分声明的,则允许后者、后者的派生类以及外部世界使用它。不过,外部世界使用它时,必须使用类限定符。例如:
Queue::Node classA; // create a classA object outside the Queue class
(嵌套结构和枚举的作用域与此相同)
2.访问控制
上面例子Queue类声明中声明Node类并没有赋予Queue类任何对Node类的访问特权,也没有赋予Node类任何对Queue类的访问特权。因此,Queue类对象只能显示地访问Node对象的公有成员。
简而言之,类声明的位置决定了类的作用域或可见性。类可见后,访问控制规则(公有、保护、私有、友元)将决定程序对嵌套类成员的访问权限。
模板中的嵌套
和类模板一样,除非编译器实现了新的export关键字,否则应将类模板和方法函数模板放置一个头文件中:
template <class Item>
class QueueTP
{ class Node
{ public:
Item item;
Node();
...
};
public:
QueueTP();
...
};
template <class Item>
QueueTP<Item>::QueueTP() { ... }
template <class Item>
QueueTP<Item>::Node::Node() { ... }
(Node是利用通用类型Item来定义的)
- 嵌套类(嵌套类、结构和枚举的作用域特征——图)
- 嵌套的作用域
- 嵌套的结构体,枚举,及其他
- 嵌套类和嵌套接口
- kotlin--嵌套类、枚举、对象
- 嵌套的函数(作用域链)
- 静态嵌套类和非静态嵌套类的区别
- 学习笔记:Java 分类枚举和策略枚举(枚举的嵌套)
- C++ 结构体嵌套、空结构体和空类
- 嵌套类:静态嵌套类和非静态嵌套类
- 嵌套类:静态嵌套类和非静态嵌套类
- Kotlin 第十三章:嵌套类、枚举类
- 共用体和结构的嵌套
- 区分结构体的嵌套和组合
- 结构体的嵌套
- 结构的嵌套
- listview的嵌套结构
- 选择结构的嵌套
- flash 人才需求在增长
- poj 2115 C Looooops
- vim pic
- poj 1276 Cash Machine
- TFS2010-Closed the problem of Installing tfs> configured >review > [sharepoint] display [failed]
- 嵌套类(嵌套类、结构和枚举的作用域特征——图)
- poj 1160 Post Office
- poj 1088 滑雪
- 最佳匹配KM算法模板
- jsp 常用命令
- cache1.5使用
- SQL安装配制失败
- 不是不想恋爱,而是,等有实力啦,就恋一场刻骨铭心、海枯石烂的爱情!!!
- Going Home