多维数组的吸气剂

问题描述 投票:0回答:1

我想知道如何准确地为多维数组做一个吸气剂。我有一个类(称为Figure),它的属性之一是二维数组(矩阵),我想从另一个包含Figure对象的类读取该矩阵。

我认为使用 getter 返回指向矩阵的常量指针是一个不错的选择,但是,尽管我知道如何在普通数组中执行此操作,IDE 警告我不能这样做,因为我正在返回它不是指针的东西:

const int SIZE = 5;

class Figure
{
public:
...
    const int* getMatrix() const {return m_matrix;};
...
private:
...
    int m_matrix[SIZE][SIZE];
...
}

我猜这里的问题是,使用矩阵需要知道矩阵有多少列(据我所知),因为编译器需要知道第二行从哪里开始,所以我猜“m_matrix”不仅是指向数组开头的指针,但它也包含列数信息(我不确定,我只是想理解错误)。无论如何,我不知道如果我想要的话我将如何返回那种类型的指针(我不想要,正如我接下来要解释的那样,但我很想知道我会怎么做:))

此外,我担心返回指针会违反数据封装(我看过一些帖子谈论这一点),我的意思是,如果我提供对存储矩阵的内存的确切部分的访问权限,矩阵可以在类 Figure 之外更改,但这种情况不应该发生。

所以,我想到的唯一一件事就是使用 getter 仅返回矩阵的一个位置,然后使用 for 循环来制作矩阵的副本。

const int SIZE = 5;

class Figure
{
public:
...
    int getMatrix(int i, int j) const {return m_matrix[i][j];};
... 
private:
...
    int m_matrix[SIZE][SIZE];
...
}

有什么更好的办法可以解决吗?

c++ matrix multidimensional-array getter
1个回答
0
投票

如果要复制整个矩阵,请实现复制构造函数和复制赋值运算符。

constexpr size_t SIZE = 5;

class Matrix
{
public:

    Matrix(const Matrix& other) {
        for (size_t row = 0; row < SIZE; row++) 
            for (size_t col = 0; col < SIZE; col++)
                m_matrix[row][col] = other.m_matrix[row][col];
    } 

    Matrix& operator=(Matrix&& other) {
        if (this == &other) return *this;

        for (size_t row = 0; row < SIZE; row++) 
            for (size_t col = 0; col < SIZE; col++)
                m_matrix[row][col] = other.m_matrix[row][col];

        return *this;
    }

private:

    int m_matrix[SIZE][SIZE];

};
© www.soinside.com 2019 - 2024. All rights reserved.