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,则可能也很有用。我已经更新了答案,以考虑到这一点(并提及常量
)。