Инициализация массива Dynami c 2d в c ++ - PullRequest
1 голос
/ 09 июля 2020

Я создал класс и первый конструктор, но я не знаю, как инициализировать 2d-массив для ref, как указано в пункте 2, необходимо сделать это, используя динамическое c распределение памяти.

Создать матрица с именем класса, следующая за закрытыми членами:

• int ** p;

• int rows;

• int cols;

Класс должен иметь следующие функции-члены:

  1. matrix () инициализирует 2d-массив до нуля. Предположим, что rows = 2 и cols = 2
  2. matrix (int ** ref, int r, int c) инициализирует 2d-массив как ref

МОЙ КОД:


class Matrix
{
    private:
        int **p;
        int rows;
        int cols;
    public:
        // CONSTRUCTORS
        Matrix()
        {
            rows = 2;
            cols = 2;
            p = new int*[2];
            // initialize the array with 2x2 size
            for (int i=0; i<2; i++)
            {
                p[i] = new int[2];
            }
            //  taking input for the array
            for (int i=0; i<2; i++)
            {
                for (int j=0; j<2; j++)
                {   
                    p[i][j] = 0;
                }
            }


        }; 
        
        Matrix(int **ref, int r, int c)
        {
            rows = r;
            cols = c;
            p = new int*[rows];
            // initialize the array with 2x2 size
            for (int i=0; i<rows; i++)
            {
                p[i] = new int[cols];
            }
            //  taking input for the array
            for (int i=0; i<rows; i++)
            {
                for (int j=0; j<cols; j++)
                {   
                    p[i][j] = **ref;
                }
            }
        }

        friend ostream& operator << (ostream& output, Matrix& obj)
        {
            output << obj.rows;
            cout << " = ROWS" << endl;
            output << obj.cols;
            cout << " = columns" << endl;
            for (int i=0; i<obj.rows; i++)
            {
                for(int j=0; j<obj.cols;j++)
                {
                    cout << obj.p[i][j] << " " ;
                }
                cout << endl;
            }
            return output;
        }
};

int main()
{
    Matrix a;
    cout << a << endl;
    return 0;
}

1 Ответ

1 голос
/ 09 июля 2020

Кажется, p[i][j] = **ref; должно быть p[i][j] = ref[i][j];.

Также вы должны следовать Правилу трех . Другими словами, вы должны объявить конструктор копирования и оператор присваивания, чтобы правильно обрабатывать копирование объекта (включая указатели).

...