数组初始化
能否在定义类时,对数组初始化? 问题点数:20、回复次数:19Top
1 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-17 17:42:25 得分 1
可以。
int a[] = {1, 2, 3};Top
2 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 17:43:58 得分 3
可以,如下:
#include <iostream>
using namespace std;
class test
{
public:
test(){
for (int i = 0; i <= 9; i ++)
{ a[i] = 0;
cout << a[i]<<endl;
}
};
private:
int a[10];
};
int main()
{
test a;
getchar();
return 1;
}Top
3 楼citywanderer2005(流浪狗)回复于 2006-03-17 17:46:52 得分 1
可以,但是不建议这样做,建议在构造函数中初始化。Top
4 楼nnlucky()回复于 2006-03-17 17:48:45 得分 0
一个运算符重载的函数 我在类内定义了一个数组并给其赋值,但是运行时出错,只好写在类外
#include "stdio.h"
//int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
class date
{
public:
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};//出错
date(int m=0,int d=0,int y=0)
{
mo=m;
da=d;
yr=y;
}
void display()
{
printf("%d/%d/%d\n",mo,da,yr);
}
date operator +(int n)
{
date dt=*this;
n+=dt.da;
while(n>days[dt.mo-1])
{n-=days[dt.mo-1];
if(++dt.mo==13)
{
dt.mo=1;
dt.yr++;
}
}
dt.da=n;
return dt;
}
private:
int mo,da,yr;
};
int main()
{
date olddate(2,22,2005);
date newdate;
//newdate=olddate+1;
newdate=olddate.operator+(56);
newdate.display();
return 0;
}
Top
5 楼nnlucky()回复于 2006-03-17 18:13:25 得分 0
test(){
for (int i = 0; i <= 9; i ++)
{ a[i] = 0;
cout << a[i]<<endl;
}
这是手动输入,能否用“=”直接赋值?Top
6 楼afeu007(梦里开宝马)回复于 2006-03-17 18:23:22 得分 0
markTop
7 楼nnlucky()回复于 2006-03-17 18:26:27 得分 0
梦里开宝马同志,mark?您不妨给解释一下Top
8 楼zxx110(新)回复于 2006-03-17 20:49:45 得分 1
没搞错吧????
test(){
for (int i = 0; i <= 9; i ++)
{ a[i] = 0;
cout << a[i]<<endl;
}
这是手动输入,能否用“=”直接赋值?
——————————————————
这个就是初始化
在类里面是不能这样
class class_name
{
public:
class_name(){}
......
public:
datatype m_data=...(值);
};
进行初始化的,只能调用成员函数初始化成员变量;(但静态变量不同)
Top
9 楼p_zyh(p_zyh)回复于 2006-03-17 21:27:53 得分 5
类的成员通常不能在声明时赋值
需要这么写
class date
{
private: // public也行,不过这个没必要暴露吧
int days[12];
public:
date(int m=0,int d=0,int y=0) : days((int[]){31,28,31,30,31,30,31,31,30,31,30,31})
{
mo=m;
da=d;
yr=y;
}
}Top
10 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-17 21:49:04 得分 1
在构造函数中初始化 ...
不能定义时候初始化Top
11 楼nnlucky()回复于 2006-03-17 22:26:33 得分 0
class date
{
private: int days[12];
public:
date(int m=0,int d=0,int y=0) : days((int[]){31,28,31,30,31,30,31,31,30,31,30,31})
{
mo=m;
da=d;
yr=y;
}
};
出错Top
12 楼zxx110(新)回复于 2006-03-18 09:13:15 得分 2
class date
{
private: int days[12];
public:
date(int m=0,int d=0,int y=0) : days((int[]){31,28,31,30,31,30,31,31,30,31,30,31})
{//数组除了在定义的时候可以进行型如 int a[]={1,2,3,...}初始化外,其它情况都不能这赋值
mo=m;
da=d;
yr=y;
}
};
我想应该是这个错Top
13 楼p_zyh(p_zyh)回复于 2006-03-18 12:45:37 得分 2
gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)下编译没有问题
你用的什么编译器?把具体的错误贴上来吧。Top
14 楼nnlucky()回复于 2006-03-18 14:09:16 得分 0
--Configuration: vvvv - Win32 Debug--------------------
Compiling...
vvvv.cpp
C:\vvvv.cpp(8) : error C2958: the left parenthesis '(' found at 'C:\Documents and Settings\caining.CN-1904402AFB23\桌面\新建文件夹 (2)\vvvv.cpp(8)' was not matched correctly
C:\vvvv.cpp(8) : error C2059: syntax error : ')'
C:\vvvv.cpp(9) : error C2059: syntax error : '{'
C:\vvvv.cpp(9) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
C:\vvvv.cpp(42) : warning C4200: nonstandard extension used : zero-sized array in struct/union
执行 cl.exe 时出错.
vvvv.obj - 1 error(s), 0 warning(s)
Top
15 楼p_zyh(p_zyh)回复于 2006-03-18 19:19:19 得分 2
试了一下,果然VC不支持这种语法
查msdn只说无法指定数组的显式初始值设定项,也没说怎么解决
实际上问题应该在于{},编译器没法正确将其解析为对数组的赋值
试过用static const int[]也不行,估计是不能这么做了Top
16 楼nnlucky()回复于 2006-03-18 21:33:59 得分 0
谢谢!那只好把数组放在类外初始化了Top
17 楼aniude(重返荣耀)回复于 2006-03-18 22:04:26 得分 1
能否在定义类时,对数组初始化?
---------
可以,,,,,如果是字符串数组就简单许多,如果是整数数组就...............我不会写,,,,,,,,,,,Top
18 楼aniude(重返荣耀)回复于 2006-03-18 22:05:06 得分 1
强调,在构造函数中初始化Top
19 楼nnlucky()回复于 2006-03-18 22:26:15 得分 0
你说的很对啊,初始化应该是写在构造函数中,可如何在构造函数中对数组赋值,确实不知道Top




