Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用getter函数访问作为2D数组的私有变量_C++ - Fatal编程技术网

C++ 如何使用getter函数访问作为2D数组的私有变量

C++ 如何使用getter函数访问作为2D数组的私有变量,c++,C++,我在做一个国际象棋游戏,我有一个棋盘类,看起来像这样: class Board { private: Tile tiles[8][8]; public: Tile getTiles() { return **tiles; } } 其中,Tile是另一个类,其成员是我要访问的 问题是我真的不能做这样的事情: void foo() { Board board; for (int i = 0; i < 8; i++) {

我在做一个国际象棋游戏,我有一个棋盘类,看起来像这样:

class Board {
private:
    Tile tiles[8][8];
public:
    Tile getTiles() {
        return **tiles;
    }
}
其中,Tile是另一个类,其成员是我要访问的

问题是我真的不能做这样的事情:

void foo() {
    Board board;
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            board.getTiles()[i][j].getPosition(); //visibly makes no sense and gives an error
        }
    }
}
void foo(){
董事会;
对于(int i=0;i<8;i++){
对于(int j=0;j<8;j++){
board.getTiles()[i][j].getPosition();//显然没有意义,并给出了一个错误
}
}
}

我应该如何访问此阵列,甚至可能吗?

因此,板是一组瓷砖。从高层次的角度来看,这就是它所做的一切。它存储为1D数组、2D数组、哈希映射或自平衡二叉树对用户来说并不重要。重要的是里面有瓷砖

因此,你应该这样做:

Tile getTile(int row, int column) const {
    return tiles[row][column];
}
或者,通过引用返回以避免复制和/或允许外部修改,但不要忘记常量正确性:

const Tile& getTile(int row, int column) const;
Tile& getTile(int row, int column);
然后,如果你改变主意,决定使用一维数组,那么,这很容易

Tile getTile(int row, int column) const {
    return tiles[row * 8 + column];
}

外部API不变,没有用户代码中断,每个人都可以继续他们的生活。

因此,一块板就是一组瓷砖。从高层次的角度来看,这就是它所做的一切。它存储为1D数组、2D数组、哈希映射或自平衡二叉树对用户来说并不重要。重要的是里面有瓷砖

因此,你应该这样做:

Tile getTile(int row, int column) const {
    return tiles[row][column];
}
或者,通过引用返回以避免复制和/或允许外部修改,但不要忘记常量正确性:

const Tile& getTile(int row, int column) const;
Tile& getTile(int row, int column);
然后,如果你改变主意,决定使用一维数组,那么,这很容易

Tile getTile(int row, int column) const {
    return tiles[row * 8 + column];
}

外部API不变,没有用户代码中断,每个人都可以继续他们的生活。

这真的需要2D吗?1D与仿真通常不那么麻烦。启用更多编译器警告<代码>返回**tiles不可能。这是一个数组数组,不是指针数组。这也是一个不匹配的返回类型。为什么不使用
getTile(int行,int列)
?您的板已经是一个瓦片容器,请为其提供更高级别的接口。不需要返回实现细节。如果您希望以这种方式使用它,那么实际上应该调用
consttile&getTile(constintrow,constintcol)const
。这里的关键是使用<代码> const ,并使用引用。一旦你解决了上面的问题,考虑一下<>代码>私有/<代码>当你要向任何人提出指针时,数组是这样的。这真的需要2D吗?1D与仿真通常不那么麻烦。启用更多编译器警告<代码>返回**tiles不可能。这是一个数组数组,不是指针数组。这也是一个不匹配的返回类型。为什么不使用
getTile(int行,int列)
?您的板已经是一个瓦片容器,请为其提供更高级别的接口。不需要返回实现细节。如果您希望以这种方式使用它,那么实际上应该调用
consttile&getTile(constintrow,constintcol)const
。这里的关键是使用<代码> const 并使用引用。一旦您解决了上面的问题,请考虑“代码>私有/<代码> >当您要将指针指向它的任何人时,该数组是通过引用返回的,<代码> >瓦特和GETALL(int行,int列){返回瓦片[行] [列];}如果需要编辑访问的
Tile
@user4581301,则可能也很有用。我已更新了答案以考虑到这一点(并提及
const
)。通过引用返回,
Tile&getTile(int行,int列){return tiles[row][column];}
,如果需要编辑访问的
磁贴
@user4581301,则可能也很有用。我已经更新了答案,以考虑到这一点(并提及
常量
)。