在一个类中定义的类被称为嵌套类,定义嵌套类的类被称为外部类。对类进行嵌套通常是为了帮助实现另一个类,并避免名称冲突。

对类嵌套往往为了帮助实现另一个类,并避免名称冲突。如下:
  1. class queue
  2. {
  3. private:
  4. struct Node{ Item item;struct Node *next };
  5. ...
  6. };
由于struct在默认情况下其成员为公有的,   所以Node实际上是一个嵌套类。

  • 作用域
嵌套类的声明位置决定了嵌套类的作用域,即它决定了程序的那部分可以创建嵌套类的对象。
如果嵌套类声明在一个类的私有部分,则只有嵌套类的外部类可以知道它。上面的类就是这种情况。在queue这个类中,queue成员可以使用Node对象或Node对象的指针,但是程序的其他部分甚至不知道存在Node类。对于queue派生下来的类,也不知道Node的存在。
如果嵌套类声明在一个类的保护部分,对于后者是可见的,对于外界是不可见的。派生类知道该嵌套类,并且可以直接创建这种类型的对象。
如果嵌套类声明在一个类的公有部分,则允许后者,后者的派生类以及外部世界使用。然后在外部使用时,必须加上外部类的外部类作用域限制符。
  1. class team
  2. {
  3. public
  4. struct Coach{...};
  5. ...
  6. };
使用Coach时,应该这样定义 team::Coach teach1;

嵌套结构和枚举的作用域于此相同。许多程序员使用公有的枚举提供客户使用的类常量。

下面表格总结了,嵌套类、结构、枚举的作用域特征。
声明位置 包含它的类是否可以使用它 从包含它的类派生下来的类是否可以使用它 外部是否可以使用它
公有
私有
保护
  • 访问权限
    在外部类中声明嵌套类并没有赋予外部类任何对嵌套类的访问权限,也没有赋予任何嵌套类对于外部类的访问权限。与一般类的访问控制相同(私有,公有,保护)。

  • 代码测试
在外部类访问嵌套类
  1. class test
  2. {
  3. public:
  4. test()
  5. {
  6. i = 10; //不能访问
  7. mytest::i = 10;//不能访问
  8. }
  9. private:
  10. class mytest
  11. {
  12. int i;
  13. int j;
  14. };
  15. };
不能直接访问mytest的成员,试着通过对象访问。
  1. class test
  2. {
  3. public:
  4. test()
  5. {
  6. cc.i = 10; //通过对象可以访问,如果i为私有则不可访问
  7. }
  8. private:
  9. class mytest
  10. {
  11. public:
  12. int i;
  13. int j;
  14. };
  15. mytest cc;
  16. };
通过测试,在外部类中声明一个嵌套类的对象。然后再外部类中利用该对象访问嵌套类,访问的规则与普通类相同。

在嵌套类中访问外部类
 因为嵌套类中没有任何对外部类的访问权限。因此只有在嵌套类中定义了改对象,才能够访问其非静态成员,但此时外部类是一个不完整的类型(类没有定义完成)。因此想在嵌套类内部访问外部类是无法做到的。

C++嵌套类(内部类与外部类)的更多相关文章

  1. Java嵌套类,内部类和外部类

    1.嵌套类,内部类 嵌套类是指被定义在一个类内部的类: JAVA的嵌套类有很多种类:1.静态成员类:2.非静态成员类:3.匿名类:4.局部类:其中,除了静态成员类之外,其他的都是内部类,因为静态成员类 ...

  2. 【转】C++之内部类(嵌套类)与外部类及友元

    [转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ...

  3. C++之内部类(嵌套类)与外部类及友元

    本人能力.精力有限,所言所感都基于自身的实践和有限的阅读.查阅,如有错误,欢迎拍砖,敬请赐教——博客园:钱智慧. 先上代码: class Outer { public: Outer(){m_outer ...

  4. C++之内部类(内部类就是外部类的友元类,单向友元。只是内部类比友元类多了一点权限)

    1. 内部类的概念 如果一个类定义在另一个类的内部,这个内部类就叫做内部类.注意此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去调用内部类.外部类对内部类没有任何优越的访问权限. ...

  5. java 编程基础 Class对象 反射 :获取类的构造方法,方法,成员变量,内部类,外部类,父类,实现的接口,修饰符等...

    类 Class  每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该Class对象就可以访问到JVM中的这个类. 我们在Java中获取Class对象一般有三种方式: (1), 使用C ...

  6. java内部类 和外部类的区别

    java 内部类和静态内部类的区别  详细连接https://www.cnblogs.com/aademeng/articles/6192954.html 下面说一说内部类(Inner Class)和 ...

  7. Java内部类与外部类的那些事

    昨天去笔试的时候遇到了Java的内部类的创建方式与访问权限的问题,我不懂,没写,故今天起来特意去试验一下,就有了这篇总结性的文章. Java中的内部类又分为非静态内部类(匿名内部类也是非静态的内部类) ...

  8. 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

    内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...

  9. java内部类和外部类

    1.使用static可以声明一个内部类, 可以直接在外部调用 class Outer{ // 定义外部类 private static String info = "hello world& ...

随机推荐

  1. csps-模拟7980题解

    题面:https://www.cnblogs.com/Juve/articles/11712702.html 树: 我太sb了不知道DROT是1,还在sb找根 记录一个fa[]数组,表示x的祖先中第一 ...

  2. 0927CSP-S模拟测试赛后总结

    84pts rank28 经历了一个阶段的持续低迷,终于回到自己之前的位置了啊. 尽管依旧不是太靠上,但是还是证明了我的努力. 宿舍三人的风水轮流转之谈终究只是戏言和巧合.嘟嘟和Lockey都进第一机 ...

  3. 如何在CRichEditCtrl控件中直接读如RTF格式的文件(这个是通过流的方式来读取文件)

    如何在CRichEditCtrl控件中直接读如RTF格式的文件   Inserting an RTF string using StreamIn   ------------------------- ...

  4. 尚学linux课程---3、linux网络说明

    尚学linux课程---3.linux网络说明 一.总结 一句话总结: 如果NAT模式:linux,VMnet8,虚拟出来的路由器 要在同一个网段, 那么 linux才能 通过 网络地址转换 经过wi ...

  5. HDU-1852-Beijing 2008-一个神奇的公式求逆元

    As we all know, the next Olympic Games will be held in Beijing in 2008. So the year 2008 seems a lit ...

  6. 第二十篇:记下第一个mysql触发器

    项目背景:给一个服务限制访问次数,当用户访问这个服务的次数达到这个值的时候,关闭他的访问权限首先访问信息存在一张表中,记录用户的ip:visitor_ip,服务的id:service_id,访问次数: ...

  7. 解决jquery调用NET webservice跨域的问题

    声明,解决方案由网上收集而来,个人整理.有别人的,也有我的. 一.webserive端 1.web.config 需要在web.config的configuration节点中加入如下的黑体部分内容. ...

  8. svg path命令

    参考:https://www.jianshu.com/p/c819ae16d29b         https://www.cnblogs.com/guxuelong/p/7743736.html M ...

  9. 使用github作为远程仓库的常见git操作

    [git上传本地代码到github新建仓库]一.建立git本地仓库 1.在本地目标文件夹(Code)中执行命令: git init //初始化本地仓库二.将上传到github的项目文件添加到本地仓库中 ...

  10. Android开发 ShapeDrawable详解

    前言 ShapeDrawable一开始我以为它是对应xml文件属性里的shape的画图,后来发现我错了... 其实ShapeDrawable更像是一共自由度更大跟偏向与实现draw()方法的一共图像绘 ...