标题:成员对象数组的问题
只看楼主
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
结帖率:100%
已结贴  问题点数:20 回复次数:9 
成员对象数组的问题
#include<iostream>
using namespace std;
class A
{
 pulic:
  A(){ cout<<"hello,A"<<endl;}
  A(int i):x(i){cout<<"x="<<x<<endl;}
  int x;
};
class B
{
  public:
   B()
{
  a[0]=A(0);
  a[1]=A(1);
//这两行代码不懂
}
  A a[2];
};
int main()
{
   B b;
cout<<b.a[0].x<<endl;
cout<<b.a[1].x<<endl;
return 0;
}
注颜色的两行代码,我实在看不懂,A(0),A(1)是构造函数并且赋初始值,而a[0],a[1]是对象数组,两者之间是怎么进行值传递,实在弄不懂,求请教
搜索更多相关主题的帖子: namespace 
2013-05-20 21:25
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:5 
对象赋值而已呀

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-05-21 08:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
而a[0],a[1]是对象数组
--- a是对象数组,a[0]是对象,a[1]是对象
2013-05-21 08:21
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
得分:0 
回复 2楼 peach5460
我知道a[2]是对象数组,但是我不明白一个构造函数怎么把值赋给对象数组,对象数组哪个变量储存构造函数传递过来的值

思考赐予新生,时间在于定义
2013-05-21 09:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 4楼 love云彩
我知道a[2]是对象数组
--- a[2]不是对象数组,a才是对象数组
2013-05-21 09:15
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
得分:0 
回复 3楼 rjsp
那a[0]=A(0); a[1]=A(1)这两个怎么解释?既然是对象,对象与构造函数之间赋值,我怎么也想不通是怎么赋值的,构造函数是个函数呀,哪有值赋给对象a[0]和a[1],对象a[0]和a[1]有哪个变量来接收构造函数传送过来的值!这点我不明白

思考赐予新生,时间在于定义
2013-05-21 09:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
对象与构造函数之间赋值
------ 哪来的构造函数?a[0]=A(0); 中a[0]是个对象,A(0)是个对象,是对象和对象之间赋值。A::A(int i)才是构造函数。

2013-05-21 10:23
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
得分:0 
回复 7楼 rjsp
比如说有这样一个类class A
里面有一个构造函数:A(int i){x=i;cout<<x<<endl;}
当有A(0)的时候,就说明A(0)是一个对象了吧?
可不可以这样理解?

思考赐予新生,时间在于定义
2013-05-21 11:36
ouyangyang
Rank: 2
等 级:论坛游民
帖 子:5
专家分:27
注 册:2013-5-20
得分:5 
//我认为 :1.运行时,第四处的语句先执行,创建两个对象,执行第一处的语句,输出了两次 “hello,A”。
//         2.执行第三处的语句,接着是调用第二处的语句,输出“x=。。。”
//         3. 执行第五处的语句,调用类A中第六处的语句, 输出a[i],实际意义是输出x.的值(对象a[0]与对象a[1]中的x不同,所以输出结果也不同)
#include<iostream>
#include<stdlib.h>

using namespace std;
class A
{
public:
  A(){ cout<<"hello,A"<<endl;}                  /*   1   */
  A(int i):x(i){cout<<"x="<<x<<endl;}           /*   2   */
  int x;                                        /*   6   */
};
class B
{
  public:
  B()
{
a[0]=A(0);                                     /*     3    */
  a[1]=A(1);//这两行代码不懂
}
  A a[2];                                     /*      4   */
};
int main()
{
   B b;
cout<<b.a[0].x<<endl;                         /*      5    */
cout<<b.a[1].x<<endl;
system("pause");
return 0;
}
2013-05-21 13:42
不要脸的猫
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:41
专家分:126
注 册:2012-6-20
得分:5 
未重载赋值运算符的情况下,对象与对象之间赋值是浅复制,即系统默认按位进行拷贝!

埋骨何须桑梓地,人生无处不青山
2013-05-21 15:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-407570-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.140421 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved