您的位置:首页 > 其它

关于如何初始化一个类内的静态二维数组变量问题

2016-12-08 09:37 429 查看
用面向对象写了一个黑白棋的代码, 发现不知道如何去初始化一个静态的二维数组, 编译器总是报错。先给大家看看类内的一些声明吧

class chess
{
public:
chess(int a):color(a)
{
num=0;
}
int counter();///计数器,计算棋子个数;
const friend void draw(chess &, chess &);///画出棋盘,每落一子更新一次;
friend int win(chess &, chess &);
void change(int, int, chess &);
static bool judge(int x, int y){};
private:
static int chessmen[9][9];
int num;
int color;///黑色为1, 白色为-1, 无子为0;
};


在类外,chessmen[9][9]就不知道怎么初始化了。一开始用的memset函数,编译器报错,然后直接给这个二维数组的某个下标所代表的值赋一个初值,编译器也会报错。

然后就想到了一个蠢办法:

int chess::chessmen[9][9]={
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, -1, 0, 0, 0},
{0, 0, 0, 0, -1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
};

也确实没有语法错误了,但总是感觉哪里很不舒服。

上网百度了一下,大致有以下两个办法:

1 构造一个静态成员函数, 用该函数初始化静态二维数组。

2 继承派生, 将该二维数组用一个类封装一下,在新写的类中可以用构造函数解决,思路也很清晰。

下面是我用第一种办法做的一个示例

class chess
{
public:
chess(int a):color(a)
{
num=0;
}
int counter();///计数器,计算棋子个数;
const friend void draw(chess &, chess &);///画出棋盘,每落一子更新一次;
friend int win(chess &, chess &);
void change(int, int, chess &);
static bool judge(int x, int y)
{
if(chessmen[x][y]==1||chessmen[x][y]==-1)
{
cout<<"此处无法落子,请重新设置棋子坐标"<<endl;
return 1;
}
return 0;
}
static void star_chess()
{
memset(chessmen, false, sizeof(chessmen));
chessmen[4][4]=chessmen[5][5]=1;
chessmen[4][5]=chessmen[5][4]=-1;
}
private:
static int chessmen[9][9];
int num;
int color;///黑色为1, 白色为-1, 无子为0;
};

int chess::chessmen[9][9]={{0}};


直接调用star_chess()静态函数完成初始化即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐