嵌套类的访问问题:

记得白凤煮的C++中有一句这样的话:C++嵌套类只是语法上的嵌套。然而在实践过程中,却并非如此。

Ex:

classA

{

public:

staticinta;

classA1

{

voidoutput()

{

          cout<}    };

};

intA::a;

可见,类 A1 嵌入A后访问A的静态变量不写外围域没有任何问题,从编译的角度看,此时位于A::的作用域内,在符号表中是可以找到a的(注意,a必须为static的)。这一点,与分开写的两个类明显不同

天津大学计算机学院 常兴龙 MSN: cxl82116@msn.com

还有一个特殊之处,见如下代码:

Ex:

classA

{

private:

inta;

classA1

{

voidoutput(A aObject)

{

          cout<}    };

};

这段代码在VC中不能编译通过,但在DEV-C++是可以的,也就是不同的编译对于嵌套类是否能访问外围类的私有成员的定义是不一致的。

嵌套类的不同作用域同名问题:

classA

{

public:

staticinta;

classA1

{

staticinta;

intvoidoutput()

{

          cout<}    };

};

intA::a=3;

intA::A1::a=4;

输出内部的a没有问题,如果要访问外部的,使用A::a指明作用域就可以,而且在嵌套类中,可以定义静态的成员。

用类似A::A1::a就可以访问.

先看一下Java的情况

Ex:

//this is a Java classclassA

{

privateintc=2;

classA1

{

intc=3;

voidoutput()

{

            System.out.println(this.c);

            System.out.println(A.this.c);

        }    }}

由定义就可看出,Java的定义是动态定义的,是基于this指针的,因此,嵌套类不只在语法上,在语义上也有隶属关系,外围类的成员,包含私有成员,对于内部类也是可见的。因此内部非Static的类不能有Static成员,且这样的内部类只有在外层的对象建立后才能对建立,所以你可以这么建立对象:

Ex:

A a = new A();

A.A1 aa = a.new A1();

或者:

Ex:

A.A1 aa = new A().new A1(); //使用匿名对象

如果是静态嵌套类

Ex:

//this is a Java classclassA

{

privateintc=2;//(1)staticclassA1

{

staticintc=3;

voidoutput()

{

//System.out.println(this.c);//work well  A.A1.c; 这个结果由编译静态成生和动态加载相对地址理论轻松解释

//System.out.println(A.this.c);//(can't work) ,很明显要求外围对象存在,把(1)改成static 的可以通过System.out.println(c);//work well}    }}

对比上面Java的定义,可见C++中的黓认行为和Java中的静态类相似,由此,可以猜出C++中的类是做静态存储的。因此,可以轻松的得出如下语句也是可以的:

Ex:

//C++

A::A1 * a = new A::A1();

因此,也可以得到在 C++ 中 ,内部类也是可以有静态对象的。

java 嵌套类implement_有关 C++ 嵌套类相关推荐

  1. 【Java 面向对象】基础、Java程序的内存划分、嵌套类(内部类、静态嵌套类)、局部类、接口的升级问题(默认方法、静态方法)、instanceof

    面向对象 对象的内存 复杂对象的内存 对象数组的内存 思考:方法存储在哪里? Java程序的内存划分 this.super 注解(Annotation) 访问控制(Access Control) to ...

  2. 嵌套类可以先在外围类中声明,然后在外围类中定义

    class List { private:     class ListItem;//声明     class Red     {       ListItem *pli; //在看到类体前只能定义该 ...

  3. C++知识点杂记2——类成员指针、嵌套类和union

    一.类成员指针 1.概念 类成员指针指向的是类的非static成员,因为类的static成员是所有类对象共有,所以static成员的指针和普通指针没有区别 2.成员变量指针 示例 class test ...

  4. 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

     1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...

  5. C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C

    C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...

  6. 面试轻松讲清楚 Java 面向对象的问题与知识(类与对象,封装,继承,多态,接口,内部类...)

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  7. Effective Java 第三版读书笔记(类和接口)

    第15条.使类和成员的可访问性最小化 对于成员有四种可访问级别: 1.私有的(private)----- 只有在声明该成员的顶层类内部才可以访问这个成员. 2.包级私有的(package-privat ...

  8. Effective Java (3rd Editin) 读书笔记:3 类和接口

    3 类和接口 Item 15:最小化类和成员的访问权限 一个设计优秀的类应该隐藏它的所有实现细节,将它的 API 和内部实现干净地分离开.这种软件设计的基本准则被称为"封装"(en ...

  9. 第四周 Java语法总结_内部类_常用类_getclass_toStrong_equals_clone_Scanner_String_StringBuffer_Integer_集合_插入排序

    文章目录 20.内部类 1.格式 2.外部类访问内部类 3.局部内部类 4.匿名内部类 1)方法的形式参数是接口 2)关于匿名内部类在开发中的使用 3)方法的返回值是接口或抽象类型 16.常用类 1. ...

最新文章

  1. Ruby的Singleton method
  2. 综合技术 --@Autowired和@Resource
  3. E24- please install the following Perl modules before executing ./mysql_install_db
  4. Javascript日期函数使用需要注意地方
  5. 年薪15W的程序员因为掌握这个技能,薪资翻倍!
  6. p1218 Superprime Rib
  7. 数据结构期末复习(四)
  8. 上海正在夺回互联网 “失落的十年”
  9. fiddler命令cls/select
  10. centos7 docker端口_docker相关知识
  11. 微信扫码跳转浏览器下载app
  12. 20145322何志威 《Java程序设计》第8周学习总结
  13. 计算机一级考试可以带滴眼液,长期看电脑的人适宜滴眼药水缓解眼干吗?有害吗?...
  14. 拆解1968年的美国军用电脑,真的怀疑是“穿越”啊!
  15. Maven之快速入门
  16. win10系统每天凌晨3点左右,自动关机重启
  17. 解决oracle异常ORA-01012: not logged on
  18. 4.2 英文分词及词性标注
  19. 使用卷积神经网络进行实时面部表情检测
  20. 高校实验室预约系统功能简介及解决方案

热门文章

  1. java发送接收UDP数据包:字符串,byte[]字节数组,文件等
  2. matlab简单分析信号调制解调
  3. 8255工作方式一A口和B口输出
  4. linux下查看内存频率,内核函数,cpu频率
  5. 团队作业第六次-团队Github实战训练
  6. java多线程基础篇第一篇-JMM
  7. scrapy 命令行基本用法
  8. 【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)
  9. 编写Windows服务疑问2:探索服务与安装器的关系
  10. 常用C/C++预处理指令详解