CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

怎么给对象成员数组初始化呢?

楼主021850524(吸血鬼牌卫生巾)2003-11-01 21:35:08 在 C/C++ / C++ 语言 提问

比如我定了下面的类:  
  class   a{  
  public:  
  int   x;  
  };  
  class   b{  
  public:  
  a   a1[3];  
  b()://怎么在这个后对对象数组a1[3]初始化呢?  
  };  
  void   main()  
  {……}  
  问题点数:0、回复次数:20Top

1 楼winco(老狼)回复于 2003-11-01 21:43:00 得分 0

其实,你如果给class   a写一个默认的构造函数,那么,系统会自动给对象数组a1[3]初始化  
  Top

2 楼021850524(吸血鬼牌卫生巾)回复于 2003-11-01 21:47:48 得分 0

不是吧  
   
  假如非要在我指定的那个苇子呢?Top

3 楼Beover1984(摇滚人生)回复于 2003-11-01 21:47:53 得分 0

对,构造函数就是做这个用的Top

4 楼021850524(吸血鬼牌卫生巾)回复于 2003-11-01 21:49:39 得分 0

假如非要在我指定的那个位子呢?  
  Top

5 楼lemon520(喷血)回复于 2003-11-01 22:06:34 得分 0

怎么回事?  
  当你写  
  a   al[3]的时候其实已经用a的默认的构造函数对每个元素初始化了  
  在b():这里再赋值就不是初始化了.Top

6 楼021850524(吸血鬼牌卫生巾)回复于 2003-11-01 22:44:59 得分 0

假如我没有在A定义的不是默认的构造函数是有带参数的呢?Top

7 楼wingfiring(非典型秃子)回复于 2003-11-01 22:56:07 得分 0

http://expert.csdn.net/Expert/topic/2304/2304238.xml?temp=.2799494  
   
  封装一下就可以了:  
  struct   ARR  
  {  
  int   m[4];  
  };  
  class   A{  
  public:  
          A();  
          const   ARR   arr;     //当然也可以是其它类型,也可以用vector  
  };  
  const   ARR   g_arr   =   {1,1,1,1};  
  A::A()   :   arr(g_arr)  
  {  
  }  
  Top

8 楼chenfengtiger(虎王)回复于 2003-11-01 23:25:01 得分 0

在第一各类里面加构造函数,在第二个类里面就可以自动初始化。Top

9 楼021850524(吸血鬼牌卫生巾)回复于 2003-11-02 01:16:07 得分 0

wingfiring(别逗了)   说的根本就不行啊Top

10 楼WindFroce(半支烟)回复于 2003-11-02 04:22:55 得分 0

应该可以的,给A类写构造函数就行了,Top

11 楼cyj2008(cyj)回复于 2003-11-02 05:09:11 得分 0

如果要定义类的对象数组的话,那么该类一定要有缺省的构造函数,否则编译时就会出现如下错误:  
  no   appropriate   default   constructor   available//没有合适的可利用的缺省构造函数Top

12 楼cyj2008(cyj)回复于 2003-11-02 05:18:10 得分 0

class   A  
  {  
  public:  
  A()  
  {  
  //value=100;  
  printf("Invoke   A()\n");  
  }  
  A(int   v){printf("Invoke   A(int   v)\n");}  
  };  
  class   B  
  {  
  private:  
  A   a[4];  
  public:  
  B(){printf("Invoke   B()\n");}  
  };  
  void   main()  
    {  
  B   b;  
  getchar();  
  }  
  输出:  
  Invoke   A()  
  Invoke   A()  
  Invoke   A()  
  Invoke   A()  
  Invoke   B()  
  从输出可以看出,数组对象会自动调用缺省构造函数(或与缺省构造函数近似的构造函数,比如A(char   ch='a')这种构造函数)进行初始化.  
  如果将A()这一构造函数的代码去掉的化,编译时就会出现如下信息:  
  no   appropriate   default   constructor   availableTop

13 楼021850524(吸血鬼牌卫生巾)回复于 2003-11-02 10:42:07 得分 0

如果不用构造函数呢?Top

14 楼021850524(吸血鬼牌卫生巾)回复于 2003-11-02 11:30:06 得分 0

如果不用是不是就不行了    
  wingfiring(别逗了)   说的根本就不行啊Top

15 楼021850524(吸血鬼牌卫生巾)回复于 2003-11-03 10:20:39 得分 0

如果不用是不是就不行了    
  wingfiring(别逗了)   说的根本就不行啊  
  Top

16 楼wingfiring(非典型秃子)回复于 2003-11-04 15:44:05 得分 0

怎么不行?问题是你不能够再构造函数后面写初始化列表,而是要用一个对象去初始化。  
  对于你的代码应该这样:  
  #include   <iostream>  
  using   namespace   std;  
  class   a{  
          public:  
                  int   x;  
  };  
  struct   ARR  
  {  
            a   ma[3];  
  };  
  ARR   g_arr   =   {   1,2,3};  
  class   b{  
          public:  
                  ARR   m;  
                  b():m(g_arr)  
                  {}  
  };  
  void   main()  
  {  
          b   ba;  
          cout   <<   ba.m.ma[0].x   <<endl;  
          cout   <<   ba.m.ma[1].x   <<endl;  
          cout   <<   ba.m.ma[2].x   <<endl;  
  }  
  编译命令行  
  cl   /GX   aa.cpp  
  aa.cpp是我的文件名。  
  我的是vc6.0  
  Top

17 楼hermit1978(一飞冲天)回复于 2003-11-04 16:43:25 得分 0

我想说,在声明类的时候,是不能对数据成员进行初始化的。  
  你可以在类的成员函数的定义中初始化a,这个操作是由a的构造函数来完成的。Top

18 楼panzhaoping(潘赵平)回复于 2003-11-04 16:51:49 得分 0

错。  
  static   加上const   就必须在类中初始化。Top

19 楼2608(爱编的程)回复于 2003-11-04 18:05:41 得分 0

若a有多个构造函数,在b的构造函数中可以指明a[]数组的那个元素是用那个特定的构造函数  
  ,如果没有指明的话,则用默认构造函数Top

20 楼wingfiring(非典型秃子)回复于 2003-11-04 18:29:28 得分 0

在语法上,是不可以通过初始化列表来给数组初始化的。  
  因为数组的初始化成员的含义是为一个集合罗列数据。  
  而对象初始化列表上意味着构造对象,这是不同的两个概念,因此,是不应该通过初始化列表来给数组成员初始化的。而数组并不是C++对象,也不能指望这种形式:  
  b():m[0](1),m[1](2),m[2](3),m[3](4).  
  所以,将数组封装成一个对象,也就是很自然的做法了。Top

相关问题

  • 请问类的成员是对象数组时,该如何初始化呢?
  • 关于初始化对象数组
  • 对象数组初始化问题
  • 数组初始化
  • 数组初始化
  • 数组初始化
  • 成员变量是数组,想对他初始化,怎么办?
  • 把数组作为类的成员时,怎么初始化它?
  • 如何对结构数组型类成员进行初始化?
  • 如何初始化 常字符数组成员变量?

关键词

  • 函数
  • 初始化
  • 数组
  • 构造函数
  • arr
  • 对象
  • wingfiring
  • 构造
  • invoke
  • 默认

得分解答快速导航

  • 帖主:021850524

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo