繁体   English   中英

如何使用getter函数访问作为二维数组的私有变量

How to access a private variable that is a 2D array with getter function

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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
        }
    }
}

我应该如何访问这个数组,甚至可能吗?

1 个回复

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

所以,你应该这样做:

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 没有变化,没有用户代码中断,每个人都可以继续他们的生活。

4 使用二维数组访问函数

我想访问Seating [row] [col] .getFirstName,但是使用以下代码,我在if条件下遇到错误和strcmp中的相同错误,任何人都可以解释这是什么意思 错误C3867'Guest :: getFirstName':非标准语法; 使用“&”创建指向成员的指针 ...

2017-10-01 05:31:08 0 84   c++
6 如何将二维数组作为类中的私有变量,然后在构造函数中进行设置

在我用Visual C ++编写的平台游戏中,每个级别最初都将存储为int的二维数组。 我决定将数组存储在一个类中会更有意义,因此我创建了一个名为Level的类。 看起来像这样: 据我所知-从查找有关类构造函数的教程,并将二维数组作为参数传递,这应该有效,所以我真的不明白为什么不这样 ...

7 使用指针访问二维数组

是 和 是相同的 ? 如果是,请解释如何? ary [3]返回第一个元素的地址或者ary [3] [0]中的值? ary是一个二维数组。 提前致谢。 ...

8 如何使用函数创建二维数组?

我正在尝试定义一个二维数组,但我想在一个函数中进行, 这是我的代码: 但它会导致错误,可以将其视为行中的注释。 我是 C++ 的新手,我不知道如何解决这个问题。 非常感谢 ...

9 二维数组和函数

如果按原样进行编译,下面的代码将不起作用,但是当用(*p+i*C+j)替换*(p+i*C+j)时,它将起作用。 有人可以帮助我理解为什么,因为我对相同功能学习的方法已经在代码中了吗? 另外,我还编写了其他具有相同语法并且完美运行的代码。 我不知道为什么这个不起作用。 ...

2015-12-13 15:35:24 1 22   c
10 OpenMP中的私有二维数组

据我在多个源中发现,当将数组作为private传递给OpenMP控制块时,每个线程都应使其成为该数组的副本。 但是,我在具有以下结构的代码片段中看到了不同的行为: 其中的功能solve()会修改变量s ,但不会涉及任何全局变量。 但是,我发现,通过常规解决方法对变量s的修改(出于 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM