类中定义自身类的对象
在C++的类定义中,是不能够在类中定义自身类的对象的,但是可以定义自身类的指针对象和引用。
class A
{
public:
A ()
{
cout<<"Constructor method."<<endl;
};
A a;
};
void main()
{
A aaaaa;
}
以上代码编译提示错误,a' : uses 'A',which is being defined。
如果把a换成*a就可以了。
而java就可以在类中定义自身类的对象。
class a{
public a aa;
}
这样的代码可以顺利编译,但是如果在定义的时候创建了对象实例,则也会编译失败的。
class a{
public a aa = new a();
}
提示错误:
Exception in thread "main"java.lang.StackOverflowError
at test1$abc.<init>(test1.java:4)
很明显,堆栈溢出了。
为什么呢?其实以上问题的本质是一致的,就是是创建对象实例的时机问题。
在C++中,在定义对象的时候就创建了对象的实例,即分配了对象的内存空间。在java中,只有调用new的方法才能创建对象的实例,在内存中分配对象的空间。所以,如果在定义的时候就定义自身类的对象,就会导致递归创建对象的现象,创建了对象aa,因为aa是一个A类的实例,那么aa中还有一个aa对象,还要创建一个aa对象,为其分配内存…………,这样就会导致递归创建对象,结果就是内存被消耗殆尽。当然,这样的设计本身也不合理。
在JAVA中,对象只有在new时才能创建对象实例,所以类中可以定义自身类的对象。如果把上例修改成令一个类的实例,则不会有任何问题。
class a{
public b bb = new b();
}
这样的代码是可以编译并运行的。
但如果在java的类中用new创建自身的对象时,将其声明为static则是可以的。这是因为static成员只在类的对象被创建或类的静态成员(方法)被调用时进行一次初始化,其后即再不创建和初始化。
类中定义自身类的对象相关推荐
- caffe common 程序分析 类中定义类
caffe中 有 common.hpp 和common.cpp // The main singleton of Caffe class and encapsulates the boost and ...
- C++在一个类中定义另一个有参数构造函数的类的对象
class A { public: A( int i ){} }; class B { public: B():a(1){} //或:B( int i ):a( i ){ }.对 ...
- 声明一个Tree(树)类,有成员ages(树龄),成员函数grow(int years)用以对ages 加上years,showage( )用以显示tree对象的ages值。在主函数中定义Tree类对
//声明一个Tree(树)类,有成员ages(树龄), //成员函数grow(int years)用以对ages 加上years //,showage()用以显示tree对象的ages值. //在主函 ...
- 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Pe
题目: 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加. 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法, ...
- 创建一个矩形类的子类——正方形类,类中定义求面积方法、重写求周长的方法.在主类中,输入一个正方形边长,创建正方形对象,求正方形的面积和周长
题目: 编写一个应用程序,创建一个矩形类,类中具有长.宽两个成员变量和求周长的方法.再创建一个矩形类的子类--正方形类,类中定义求面积方法.重写求周长的方法.在主类中,输入一个正方形边长,创建正方形对 ...
- python 类中定义类_Python中的动态类定义
python 类中定义类 Here's a neat Python trick you might just find useful one day. Let's look at how you ca ...
- 【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
文章目录 总结 一.接口中定义 call() 方法 二.类中定义 call() 方法 三.完整代码示例 总结 在 实例对象后使用 " () " 括号符号 , 表示调用该实例对象的 ...
- 在java程序中定义的类有两种成员_java试题 急需答案 谢谢!!!
三.填空(每小题2分,共10分)1.在Applet中,创建一个具有10行45列的多行文本区对象ta的语句为:2.创建一个标识有"关闭"字样的标签对象gb的语句为.3.方法是一种仅有 ...
- python中类的定义_python 类中定义类
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 现有自定义类(color.py)如下,类位于路径'userschuxingpyt ...
最新文章
- 博士生起诉学校,因核心期刊发文数不够申请学位被拒,一审判决胜诉!
- 审计风险控制流程的起点_审计理论结构的起点和逻辑起点辨析
- R语言ggplot2可视化增加轴标签(ticks)和轴标题(title)之间的距离实战
- Java数据类型中String、Integer、int相互间的转换
- 记录一下Memcached的用法:
- 使用MiniProfiler跟踪MVC + EF + Bootstrap 2 权限管理系统的性能消耗
- 蓝桥杯2017初赛-分巧克力-二分
- 深入Golang之sync.Pool详解
- mysql文件导出NULL值处理_Mysql select into outfile NULL值导出的处理方法
- python文本提取序列信息_从fasta文件中通过头中的ID号提取序列
- VB的doevents,制造多线程的效果
- python画散点图-python画时间序列散点图
- Listary Pro - 搜索、管理都挺好
- springboot测试类无法注入bean
- 只有7步,就能将任何魔方6面还原
- 漫谈测试成长之探索——测试用例评审
- LVS负载均衡集群——NAT
- 1335:【例2-4】连通块
- pom.xml中解决Provides transitive vulnerable dependency maven:org.yaml:snakeyaml:1.33警告
- echarts柱状图数值差异过大和最小值无法选中的问题解决
热门文章
- 【11_83】Remove Duplicates from Sorted List
- 在HTML文件中加载js
- Android-ndk编译osgdb_3ds静态库
- FPGA Design's Tips
- Excel列数和列字母的转换(column number 和 column letters 互转)
- 如何解决复杂条件下的程序流的控制问题?
- 4.编程打印一个二维数组中所有元素的和,并打印最大值,最小值(以及它们所在的行号和列号)
- 牛客网-剑指offer 第二题(字符替换)
- HarmonyOS之设备传感器的功能和使用
- iOS之性能优化·提高App的编译速度