一个类的对象作为另一个类的成员变量的问题

「已注销」 2011-10-17 12:02:35
我在第二个类里面声明了第一个类的对象,那么是声明成指针对象还是普通对象?因为我在声明普通对象的时候,编译出错,说“第一个类的构造函数的调用没有匹配的函数”。当声明成指针类型对象的时候,就编译通过。
我想问一下这里面到底有什么区别?
还有这个对象把它声明在private里面呢,还是声明在public里面呢?
第二个类是Qt的主窗口类。
...全文
1167 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mymixing 的回复:]
楼主,这个问题很好解释。
如果你再主类中(也即第一个类)声明了一个其他类的对象。
那么你主类实例化的时候,也同时实例化了那个其他类的对象。
如果这个其他类对象有自己的特殊的构造函数,你主类构造时如果没有实现那个构造函数。
那么这个其他类的对象因为缺少构造函数的调用是无法实例化的。
但如果你主类中声明的是其他类的指针,因为32位程序中指针就是一个4字节的变量。
所以不存在实例化其他类对象……
[/Quote]

前几天出差了,一直都没结贴,不好意思啊!
那请问在主类中实例化这个类的对象和在其他地方实例化类的对象都有什么区别呢?
simimasaiya 2011-10-17
  • 打赏
  • 举报
回复
路过学习
pengzhixi 2011-10-17
  • 打赏
  • 举报
回复
当你声明的是类的对象作为成员时,那么该类的完整声明必须可见,如果是声明为该类的对象的指针,那么只需要前置声明该类即可。
Enter空格 2011-10-17
  • 打赏
  • 举报
回复
楼主,这个问题很好解释。
如果你再主类中(也即第一个类)声明了一个其他类的对象。
那么你主类实例化的时候,也同时实例化了那个其他类的对象。
如果这个其他类对象有自己的特殊的构造函数,你主类构造时如果没有实现那个构造函数。
那么这个其他类的对象因为缺少构造函数的调用是无法实例化的。
但如果你主类中声明的是其他类的指针,因为32位程序中指针就是一个4字节的变量。
所以不存在实例化其他类对象的情况,所以可以安全实例化主类对象。
也就不会报错了。
这里其实只有一点区别,其他类的对象,是在主类中实例化的还是在别的地方实例化的。
PG 2011-10-17
  • 打赏
  • 举报
回复
帮顶~
Xomic 2011-10-17
  • 打赏
  • 举报
回复
1、均可

2、如果是指针类型的话就跟内置类型一样(int),如果是普通对象类型,第二个类的构造函数
Class2::Class2(参数):Class1(参数)。这种技术叫聚合。具体自己看看。。。

3、视具体情况,语法上面都可。
cocoabird 2011-10-17
  • 打赏
  • 举报
回复
我也常碰到这样的问题,一般我都放在public里,不过不懂是什么原因,希望大神解释下
星羽 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kuaikuai3698 的回复:]

引用 8 楼 mymixing 的回复:
引用 7 楼 kuaikuai3698 的回复:
是在主类中实例化另一个类的指针对象的,然后我在主类中通过指针调用另一个类的数组成员变量的值。
如果把指针对象放在private里,读出的值是都是0,如果声明在public里,读出的值却大小不一,有0,有负0,有0.017,-4.876,还有几十位的正负数,这是为什么呢?

呃。。。没读懂。。。。……
[/Quote]

这也太神奇了吧........
看看你的完整代码吧
Enter空格 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kuaikuai3698 的回复:]
就是我把指针对象放在private里和public里,最后调用的结果不一样
[/Quote]
代码怎么写的。
你这情况估计是代码写错了。
「已注销」 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mymixing 的回复:]
引用 7 楼 kuaikuai3698 的回复:
是在主类中实例化另一个类的指针对象的,然后我在主类中通过指针调用另一个类的数组成员变量的值。
如果把指针对象放在private里,读出的值是都是0,如果声明在public里,读出的值却大小不一,有0,有负0,有0.017,-4.876,还有几十位的正负数,这是为什么呢?

呃。。。没读懂。。。。
[/Quote]
就是我把指针对象放在private里和public里,最后调用的结果不一样
Enter空格 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kuaikuai3698 的回复:]
是在主类中实例化另一个类的指针对象的,然后我在主类中通过指针调用另一个类的数组成员变量的值。
如果把指针对象放在private里,读出的值是都是0,如果声明在public里,读出的值却大小不一,有0,有负0,有0.017,-4.876,还有几十位的正负数,这是为什么呢?
[/Quote]
呃。。。没读懂。。。。
「已注销」 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mymixing 的回复:]
楼主,这个问题很好解释。
如果你再主类中(也即第一个类)声明了一个其他类的对象。
那么你主类实例化的时候,也同时实例化了那个其他类的对象。
如果这个其他类对象有自己的特殊的构造函数,你主类构造时如果没有实现那个构造函数。
那么这个其他类的对象因为缺少构造函数的调用是无法实例化的。
但如果你主类中声明的是其他类的指针,因为32位程序中指针就是一个4字节的变量。
所以不存在实例化其他类对象……
[/Quote]
是在主类中实例化另一个类的指针对象的,然后我在主类中通过指针调用另一个类的数组成员变量的值。
如果把指针对象放在private里,读出的值是都是0,如果声明在public里,读出的值却大小不一,有0,有负0,有0.017,-4.876,还有几十位的正负数,这是为什么呢?

64,671

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧