注册 登录
编程论坛 C++教室

成员对象数组的问题

love云彩 发布于 2013-05-20 21:25, 625 次点击
#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]是对象数组,两者之间是怎么进行值传递,实在弄不懂,求请教
9 回复
#2
peach54602013-05-21 08:18
对象赋值而已呀
#3
rjsp2013-05-21 08:21
而a[0],a[1]是对象数组
--- a是对象数组,a[0]是对象,a[1]是对象
#4
love云彩2013-05-21 09:13
回复 2楼 peach5460
我知道a[2]是对象数组,但是我不明白一个构造函数怎么把值赋给对象数组,对象数组哪个变量储存构造函数传递过来的值
#5
rjsp2013-05-21 09:15
回复 4楼 love云彩
我知道a[2]是对象数组
--- a[2]不是对象数组,a才是对象数组
#6
love云彩2013-05-21 09:31
回复 3楼 rjsp
那a[0]=A(0); a[1]=A(1)这两个怎么解释?既然是对象,对象与构造函数之间赋值,我怎么也想不通是怎么赋值的,构造函数是个函数呀,哪有值赋给对象a[0]和a[1],对象a[0]和a[1]有哪个变量来接收构造函数传送过来的值!这点我不明白
#7
rjsp2013-05-21 10:23
对象与构造函数之间赋值
------ 哪来的构造函数?a[0]=A(0); 中a[0]是个对象,A(0)是个对象,是对象和对象之间赋值。A::A(int i)才是构造函数。

#8
love云彩2013-05-21 11:36
回复 7楼 rjsp
比如说有这样一个类class A
里面有一个构造函数:A(int i){x=i;cout<<x<<endl;}
当有A(0)的时候,就说明A(0)是一个对象了吧?
可不可以这样理解?
#9
ouyangyang2013-05-21 13:42
//我认为 :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;
}
#10
不要脸的猫2013-05-21 15:33
未重载赋值运算符的情况下,对象与对象之间赋值是浅复制,即系统默认按位进行拷贝!
1