C++ 如何使用类构造函数创建多个数组,而不在类中创建多个数组?

C++ 如何使用类构造函数创建多个数组,而不在类中创建多个数组?,c++,operator-overloading,C++,Operator Overloading,我正在做一个关于操作符重载的练习。我已经创建了一个矩阵类,我应该重载操作符,这样我就可以有效地对矩阵进行算术运算 我的说明说,我应该使用具有2个参数的类构造函数创建两个矩阵数组,第三个矩阵数组将用于使用默认构造函数(1个参数)存储算术结果 因为我将使用这些数组重载操作符,所以它们需要是类的数据成员(我认为)。然而,我认为类应该尽可能地代表现实生活中的事物,所以用多个数组创建一个矩阵类对我来说没有意义(一个矩阵只是一个矩阵) 我是否误解了类,或者是否有其他方法使用我没有想到的类构造函数来生成附加矩

我正在做一个关于操作符重载的练习。我已经创建了一个矩阵类,我应该重载操作符,这样我就可以有效地对矩阵进行算术运算

我的说明说,我应该使用具有2个参数的类构造函数创建两个矩阵数组,第三个矩阵数组将用于使用默认构造函数(1个参数)存储算术结果

因为我将使用这些数组重载操作符,所以它们需要是类的数据成员(我认为)。然而,我认为类应该尽可能地代表现实生活中的事物,所以用多个数组创建一个矩阵类对我来说没有意义(一个矩阵只是一个矩阵)

我是否误解了类,或者是否有其他方法使用我没有想到的类构造函数来生成附加矩阵?谢谢大家,这是有问题的代码

class matrix
{
    friend ostream& operator << (ostream&, const matrix&); // << overloader 

    private:
    int size // size indicates length of rows and cols, so size 3 means a 3 x 3 matrix
    int array[10][10];

    public:
    matrix(int);
    matrix(int, int);
};

matrix:: matrix (int sizeIn) //default constructor, use to make result matrix
{
    int MAX_SIZE = 10;

    if (0 > sizeIn && sizeIn > 10)
    {
     size = MAX_SIZE;
    }
    else
    {
     size = sizeIn;
    }

    for (int i = 0; i < size; i++)
        for (int j = 0; j < size; j++)
             array[i][j] = 0;
}

matrix:: matrix (int sizeIn, int rangeIn) //use to make first 2 matrices that will be added
{
    int range;
    int MAX_SIZE = 10;
    int MAX_RANGE = 20;

    if (0 > sizeIn && sizeIn > 10)
    {
     size = MAX_SIZE;
    }
    else
    {
     size = sizeIn;
    }

    if (0 > rangeIn && rangeIn > 20)
    {
      range = MAX_RANGE;
    }
    else
    {
     range = rangeIn;
    }

    for (int i = 0; i < size; i++)
        for (int j = 0; j < size; j++)
            array[i][j] = (rand() % (2 * range + 1) - range); //random number for each index
}

ostream & operator << (ostream & os, const matrix & arrayPrint) // << overloader
{
    for (int i = 0; i < arrayPrint.size; i++)
    {
        cout << '|';
        for (int j = 0; j < arrayPrint.size; j++)
            {
            os << setw(4) << arrayPrint.array[i][j] << " ";
            }
        os << setw(2) << '|' << endl;
    }
return os;
}
类矩阵
{
friend ostream&操作员10)
{
尺寸=最大尺寸;
}
其他的
{
尺寸=尺寸;
}
对于(int i=0;isizeIn&&sizeIn>10)
{
尺寸=最大尺寸;
}
其他的
{
尺寸=尺寸;
}
如果(0>rangeIn&&rangeIn>20)
{
范围=最大范围;
}
其他的
{
范围=范围;
}
对于(int i=0;iostream&operator您误解了这个问题。您需要创建一个包含一个二维数组的矩阵类,然后使用构造函数生成两个不同的矩阵,然后添加它们并将结果存储到第三个矩阵中。所以你最终会得到这样的结果

    matrix::matrix(int Size, int Range)
    {
         if(Range < 0 || Range > RANGE_MAX)
             Range = RANGE_MAX;

         if(Size < 0 || Size > SIZE_MAX)
             Size = SIZE_MAX;

        for (int i = 0; i < Size; i++)
            for (int j = 0; j < Size; j++)
               array[i][j] = (rand() % (2 * Range + 1) - Range);
    }
然后将重载=运算符和+运算符,以便执行以下操作(当然,首先需要检查大小是否允许操作)

要重载“=”运算符

matrix& matrix::operator=(const matrix &rhs)
{
   // if we have A = B then A is me and B is the rhs
   // assuming all members are public you might need to write get/set functions
   size = rhs.size;         // my size equals the right hand side's size
   range = rhs.range;
   for(int i = 0; i < size; i++)
     for(int j = 0; j < size; j++)
        array[i][j] = rhs.array[i][j];

    return *this;   // return me
}
矩阵和矩阵::运算符=(常数矩阵和rhs)
{
//如果我们有A=B,那么A是me,B是rhs
//假设所有成员都是公共的,您可能需要编写get/set函数
size=rhs.size;//我的尺寸等于右手边的尺寸
范围=rhs范围;
对于(int i=0;i
Hmm,我应该只向构造函数传递大小和范围参数,而不是数组。@Matt by range是指列计数,对吗?这很奇怪。您是否100%确定不能为此分配而重载构造函数。老实说,这毫无意义,除非您想在初始化后填充矩阵。不,范围是指索引内容,因此如果范围=10,则只能生成1到10的数字作为数组中的数字。大小决定行和列,所以3的大小意味着一个3 x 3的数组。@Matt好的,我想我现在知道了。您需要使用一个二维数组创建一个矩阵,然后重载运算符。我会在一秒钟内编辑我的答案。我了解如何制作数组,如果你看一下我代码中的构造函数,你会发现它与你编辑的示例非常相似。我不明白的是如何在我的类定义中创建两个数组而不创建额外的数组。我不熟悉像你这样制作矩阵。我刚刚使用了数组
matrix C = A + B
matrix& matrix::operator=(const matrix &rhs)
{
   // if we have A = B then A is me and B is the rhs
   // assuming all members are public you might need to write get/set functions
   size = rhs.size;         // my size equals the right hand side's size
   range = rhs.range;
   for(int i = 0; i < size; i++)
     for(int j = 0; j < size; j++)
        array[i][j] = rhs.array[i][j];

    return *this;   // return me
}