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

很弱的,从没想过的问题,如何初始化一个类的成员,这个成员的类型是数组

楼主stkane(左手无名指)2005-06-01 15:40:43 在 C/C++ / C++ 语言 提问

比如  
  class   CTest  
  {  
  public:  
  CTest(void);  
  ~CTest(void);  
  protected:  
  int   const   m_iArr[2][2];  
  };  
  问题是,怎么给这个数组   m_iArr   赋初值啊?  
  问题点数:50、回复次数:23Top

1 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-06-01 15:45:51 得分 0

n多方法,  
   
  可以写个init(),在其中循环cin值,  
   
  也可以用其他的数组赋值啊.  
   
  memcpy()就可以了Top

2 楼stkane(左手无名指)回复于 2005-06-01 15:52:24 得分 0

这是个const的啊Top

3 楼xzgyb(老达摩)回复于 2005-06-01 16:04:17 得分 0

好像无法在初始化列表中对const数组初始化  
  可以用  
  static   int   const   m_iArr[2][2];  
  Top

4 楼umbrella1984(雨伞(KEN))回复于 2005-06-01 16:07:58 得分 0

构造函数里初始化可以吗?另外int   const   m_iArr[2][2];和const   int   m_iArr[2][2];有什么不同?Top

5 楼darkstar21cn(≮天残≯无畏)(死亡进行时)回复于 2005-06-01 16:16:56 得分 0

CTest::CTest   ()  
  :m_iArr   ({})  
  {  
  }  
  不知道这样是否可以?Top

6 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-06-01 16:23:30 得分 0

可以写个init(),在其中循环cin值,  
  ------------------  
  嗯,可以在构造函数里调用这个init().Top

7 楼stkane(左手无名指)回复于 2005-06-01 16:27:17 得分 0

晕倒,重申:  
  int   cosnt   m_iArr[2][2];  
  或者用  
  const   int   m_iArr[2][2];  
  这两个是一样的。  
  就是说这个类的成员不仅仅是数组,还是常量数组。  
  另外一个问题是  
  如果   声明了   int*   m_piArr;  
  构造函数中:   m_piArr=new   int[2];  
  这个数组是不是也不能初始化?  
  Top

8 楼whyglinux(山青水秀)回复于 2005-06-01 16:43:07 得分 50

对于类的   const   非静态数据成员,其初始化的唯一场所是在构造函数的初始化列表中进行(因为是const,不能在构造函数中通过赋值语句进行)。如:  
   
  class   A   {  
  public:  
  A()   :   m(5)   {}  
  private:  
  const   int   m;  
  //   ...  
  };  
   
  但是这样的话对这个   const   非静态数据成员就有一个要求:这个成员类型必须要有对应的构造函数,只有通过调用构造函数才能对其完成初始化。然而,数组却不具备这个条件。因此,我们说上面的程序是病态的(ill-formed),即其实现是不正确的。Top

9 楼kenyle(哎呀妈呀~这不就是传说中的B13吗~~)回复于 2005-06-01 17:05:29 得分 0

这个问题还弱呀!试了半天没有一个在VC下行的,也许其它的编译器行吧。这个主要看ANSC C++的标准了。实在不行到官方去看看。Top

10 楼foochow(无聊,灌水......)回复于 2005-06-01 17:48:29 得分 0

用老达摩的方法static   int   const   m_iArr[2][2];  
  Top

11 楼qhfu(改个名字)回复于 2005-06-01 18:46:57 得分 0

觉得whyglinux(山青水秀)   说的有道理,初始化代码是编译器自动加到构造函数里的,,     所以不能年在做第二次付值了。Top

12 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-06-01 19:13:43 得分 0

要么定义成静态的,然后全局初始化Top

13 楼zdy_8212(zdy_8212)回复于 2005-06-02 03:35:46 得分 0

多次分配Top

14 楼Coffee_62(62度的咖啡)回复于 2005-06-02 05:28:36 得分 0

我也想知道Top

15 楼stkane(左手无名指)回复于 2005-06-02 15:30:22 得分 0

to   山清水秀:  
  如果是pArr=new   int[100];  
  有办法对这个pArr赋初值吗?Top

16 楼whyglinux(山青水秀)回复于 2005-06-02 15:43:01 得分 0

>>   如果是pArr=new   int[100];  
  >>   有办法对这个pArr赋初值吗?  
   
  pArr是什么?pArr=new   int[100];不就是给pArr赋值吗?  
   
  再说清楚一点,否则不明白你的意思。  
  Top

17 楼july81(鸟)回复于 2005-06-02 16:44:24 得分 0

他的意思我想是给指针指向的那块内存区域赋值。这样是不行的。Top

18 楼hj008(catch jjhou)回复于 2005-06-02 16:50:58 得分 0

对于类的   const   非静态数据成员,其初始化的唯一场所是在构造函数的初始化列表中进行(因为是const,不能在构造函数中通过赋值语句进行),这是最重要的.你可以查看一下C++大学教程里关于类的那一章。也可以看看楼上whyglinux(山青水秀)的方法,很对。  
  Top

19 楼sinkinglife(沉沦)回复于 2005-06-02 17:20:18 得分 0

这好像是没有办法。声明一个const   int   arr[10][10]编译器都报错,无法初始化。Top

20 楼CloudOfFly(追忆)回复于 2005-06-02 17:36:51 得分 0

用构造函数列表初始化Top

21 楼stkane(左手无名指)回复于 2005-06-02 18:11:17 得分 0

我的意思就是  
    july81(鸟)  
  所说的,我想这是C里面不多的几个不十分逻辑的地方之一吧。  
  要知道这一点在不允许任何static变量和global变量的系统里面,实在是。。。  
  Top

22 楼mostideal(三甲)回复于 2005-06-03 00:16:48 得分 0

markTop

23 楼wharl()回复于 2005-06-04 15:49:12 得分 0

#include   <iostream>  
  using   namespace   std;  
   
  class   CTest  
  {  
  public:  
  CTest()  
  {  
  cout   <<   m_iArr[1][1]   <<   endl;  
  }  
  ~CTest(void){};  
  protected:  
  static   int   m_iArr[2][2];  
  };  
   
  int   CTest::m_iArr[2][2]={1,   2,   3,   4};  
   
  int   main()  
  {  
  CTest   a;  
  return   0;  
  }  
   
  似乎只有这样才能通过。。。。  
  protected:  
  static   int   m_iArr[2][2];  
  该为  
  protected:  
  static   int   const   m_iArr[2][2];  
  就报错:error   C2373:   'protected:   static   int   const   (*   CTest::m_iArr)[2]'   :   redefinition;   different   type   modifiers  
  我是菜鸟。。。。。。。  
  望高人指点怎样初始化  
  static   int   const   m_iArr[2][2];Top

相关问题

  • 数组初始化
  • 数组初始化
  • 数组初始化
  • 成员变量是数组,想对他初始化,怎么办?
  • 把数组作为类的成员时,怎么初始化它?
  • 如何对结构数组型类成员进行初始化?
  • 如何初始化 常字符数组成员变量?
  • 请问数组类成员如何初始化啊???:(
  • 请教:类成员数组如何初始化
  • vb.net 中如何对字节类型的数组初始化

关键词

  • c++
  • 函数
  • 编译器
  • 数据
  • 初始化
  • 数组
  • iarr
  • 构造函数
  • 赋值
  • 成员

得分解答快速导航

  • 帖主:stkane
  • whyglinux

相关链接

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

广告也精彩

反馈

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