将矩阵从一个班级发送到另一个班级

时间:2018-07-31 10:05:12

标签: c++ oop matrix

我有一个带有矩阵的类

class A{
private:
    int matrix[10][5];
};

我还有其他带有方法的类,可以获取矩阵并对其进行处理

class B{
public:
    void method(/*What to write here?*/){...}
};

因此,帮助释放语法。如何从班级获取矩阵并将其发送给其他班级?

2 个答案:

答案 0 :(得分:0)

通过引用

void method(A& a){...}

如果method不需要修改a,则通过const引用传递

void method(const A& a){...}

根据下面的评论,您似乎想要这样的东西

class A
{
public:
    void set_coordinates(...) { matrix[...][...] = ...; }
private:
    int matrix[10][5];
};

class B
{
public:
    void method(A& a) { a.set_coordinates(...); }
};

即将对象A传递给方法B::method,但向A添加足够的公共方法,以便B可以完成所需的工作。这就是封装的全部内容。

答案 1 :(得分:0)

您可以使用vector<vector<int> >。这样,您就可以将它们传递出去。或者,您可以使用朋友类,或使用双指针。让我知道您是否想要提供这些示例。

使用双指针:

#include <iostream>
using namespace std;
class A{
    private:
      int **matrix;
    public:
       A()
       {
           // since 2D array is array of arrays, 
           // double pointer is a pointer to array of pointers
           // define the matrix, first make matrix point to an array of pointers
           matrix = new int*[10];

           // now make each element of pointer array
           // which is a pointer point to actual array
           for(int i=0;i<10;i++)
               matrix[i] = new int[5];

           // initialize like simple 2D array (another function maybe)
           for(int i=0;i<10;i++)
              for(int j=0;j<5;j++)
                matrix[i][j] = i+j;
       }

       // note the return-type
       int ** getMatrix()
       {
           return matrix;
       }
};

class B{
      public:

   // wherever you want to access matrix, pass the double pointer
       void method(int **matrix){
           for(int i=0;i<10;i++)
              for(int j=0;j<5;j++)
                  cout << matrix[i][j] << endl;
      }
};

int main() {
    // create objects
    A a;
    B b;

    // pass the double pointer to B's method
    b.method(a.getMatrix());
    return 0;
}