Как бы я создал несколько массивов, используя конструктор класса, не создавая более одного массива в классе? - PullRequest
0 голосов
/ 08 мая 2011

Я работаю над упражнением по перегрузке оператора.Я создал матричный класс и должен перегрузить операторы, чтобы эффективно выполнять арифметику с матрицами.

Мои указания говорят, что я должен создать два матричных массива, используя конструктор класса, который имеет 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;
}

1 Ответ

0 голосов
/ 08 мая 2011

Вы неправильно поняли вопрос.Вам необходимо создать класс Matrix, который имеет 1 двумерный массив, а затем использовать конструктор для создания двух разных матриц, а затем добавить их и сохранить результат в третью.Таким образом, вы получите что-то вроде этого

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

Затем вы создадите две матрицы A и B следующим образом

matrix A(4,10); // Create a Matrix A size 4 with random entries in range of 10
matrix B(3,8); // Create a Matrix B with size 3 with random entries in range of 8

Затем вы перегрузите оператор = и оператор +Вы делаете следующее (конечно, вам нужно сначала проверить, позволяют ли размеры операции)

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...