一个给数组赋值的问题!!!

ctech 2005-06-16 10:15:34
#include <iostream>
#include <string>

using namespace std;

class air
{
private:
string information[10][5];
public:
void dis ();
air ();
};
air::air ()
{
string information[10][5] = //这个地方怎么给成员information初始化啊???
{
{"西安","北京","AX101","2005年10月8日","9点15分"},
{"西安","上海","AX102","2005年10月9日","10点20分"},
{"西安","伦敦","AX103","2005年10月10日","11点30分"},
{"西安","纽约","AX104","2005年10月11日","11点45分"},
{"西安","墨尔本","AX105","2005年10月12日","12点05分"},
{"西安","东京","AX106","2005年10月13日","14点30分"},
{"西安","Zaft","AX107","2005年10月14日","15点15分"},
{"西安","Plant","AX108","2005年10月15日","17点20分"},
{"西安","Devil","AX109","2005年10月16日","20点30分"},
{"西安","Bleach","AX110","2005年10月17日","21点15分"}
};
}
void air::dis ()
{
for (int i = 0; i<10; i++)
cout << information[i][1];
}

int main ()
{
air cli;
cli.dis ();
return 0;
}
...全文
224 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liao531 2005-06-17
  • 打赏
  • 举报
回复
初始化和赋值是有区别的(我是这样想的),上面的只能是赋值,不能算初始化。
初始化对于一个class实例来说,是在它的构造函数第一次被调用的时候。
在你赋值前,string的默认构造函数已经调用了。
CMyMfc 2005-06-17
  • 打赏
  • 举报
回复
那就牺牲点成本吧
air::air ()
{
char * info[10][5] = //这个地方怎么给成员information初始化啊???
{
{"西安","北京","AX101","2005年10月8日","9点15分"},
{"西安","上海","AX102","2005年10月9日","10点20分"},
{"西安","伦敦","AX103","2005年10月10日","11点30分"},
{"西安","纽约","AX104","2005年10月11日","11点45分"},
{"西安","墨尔本","AX105","2005年10月12日","12点05分"},
{"西安","东京","AX106","2005年10月13日","14点30分"},
{"西安","Zaft","AX107","2005年10月14日","15点15分"},
{"西安","Plant","AX108","2005年10月15日","17点20分"},
{"西安","Devil","AX109","2005年10月16日","20点30分"},
{"西安","Bleach","AX110","2005年10月17日","21点15分"}
};
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 5; ++j) {
information[i][j] = info[i][j];
}
}
}

多开了10*5*4 = 200个字节的临时空间
ctech 2005-06-17
  • 打赏
  • 举报
回复
sunman1982(冥王星)你的做法不符合楼主的本意,静态的成员不是每一个类的对象都占单独的内存的,而是所有的对象共享这个成员。

_______________________________________________________________________________+++

其实这也算是一种方法吗,哈哈。 谁还有别的办法,可以不用static???
248406869 2005-06-17
  • 打赏
  • 举报
回复
sunman1982(冥王星)你的做法不符合楼主的本意,静态的成员不是每一个类的对象都占单独的内存的,而是所有的对象共享这个成员。
sunman1982 2005-06-16
  • 打赏
  • 举报
回复
汗,查了下资料,这样写就可以了,具体原因……
#include <iostream>
#include <string>

using namespace std;

class air
{
private:
static string information[10][5];
public:
//void dir();
void dis ();
//air ();
};
//void air::dir ()
//{
string air:: information[10][5] = //这个地方怎么给成员information初始化啊???
{
"西安","北京","AX101","2005年10月8日","9点15分",
"西安","上海","AX102","2005年10月9日","10点20分",
"西安","伦敦","AX103","2005年10月10日","11点30分",
"西安","纽约","AX104","2005年10月11日","11点45分",
"西安","墨尔本","AX105","2005年10月12日","12点05分",
"西安","东京","AX106","2005年10月13日","14点30分",
"西安","Zaft","AX107","2005年10月14日","15点15分",
"西安","Plant","AX108","2005年10月15日","17点20分",
"西安","Devil","AX109","2005年10月16日","20点30分",
"西安","Bleach","AX110","2005年10月17日","21点15分",
};
//}
void air::dis ()
{
for (int i = 0; i<10; i++)
cout<<information[i][4]<<endl;
}

int main ()
{
air cli;
// cli.dir();
cli.dis ();
system("pause");
return 0;
}
liao531 2005-06-16
  • 打赏
  • 举报
回复
呵呵,你在构造函数里面定义的string information[10][5] 将类成员string information[10][5]给屏蔽掉了,你的赋值(初始化)只是对这个构造函数内的局部数组赋值。不影响你的类数据成员。
sunman1982 2005-06-16
  • 打赏
  • 举报
回复
看不出来有什么问题, 二维数组有几种赋值方法,分行赋值()就是你上面那个。()
全部数据写在一个大括号内,如、
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
部分元素赋值,如

int a[3][4] = {{1},{5},{4}};

……
看不出来有错,可是没有输出。


liao531 2005-06-16
  • 打赏
  • 举报
回复
string的初始化必须放在成员初始化列表中,放在大括号里的只能是赋值,而因为又是数组,没法用成员初始化列表初始化。所以想初始化不成立。我想只有在构造函数里循环赋值了。我是c++初学者,希望大家不要笑话。
sunman1982 2005-06-16
  • 打赏
  • 举报
回复
哦看错了,不可以。
sunman1982 2005-06-16
  • 打赏
  • 举报
回复
你上面那样就可以的啊、。

64,674

社区成员

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

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