Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
IAlexey
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 15
1

Передача двумерного массива в конструктор класса

24.04.2016, 17:01. Просмотров 896. Ответов 3
Метки нет (Все метки)

Здравствуйте!
Не получается передать двумерный массив как параметр конструктора.
Необходимо, чтобы пользователь ввел размерность квадратной матрицы и массив с клавиатуры. Эти значения надо передать конструктору с параметрами класса матрица.
Вот как я пытался это сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
... 
cout << "\nРазмер матрицы n = "; 
cin >> xn; 
for (int i = 0; i < xn; i++) 
    for (int j = 0; j < xn; j++) 
    { 
        cout << "\nВвод элементов матрицы"; 
        cin >> xA[i][j]; 
    } 
    MatrixArray[element] = new Matrix(xn, &xA[0][0]); 
...
файл методов:
C++
1
2
3
4
5
6
7
8
9
Matrix::Matrix(int xn, int* xA)      //размер матрицы, указатель начала массива 
{ 
    n = xn; 
    for (int i = 0; i < n; i++) 
    { 
        for (int j = 0; j < n; j++) 
            A[i][j] = *xA++;             
    } 
}
Когда вывожу, то получается первый ряд правильно, а дальше нет.
Например если ввел матрицу
1 2 3
4 5 6
7 8 9
То в итоге получу:
1 2 3
-12323 -213230 -231213
-21312 -321321 -231231
Числа конечно не такие, но суть передал.
По заданию статическая матрица должна передаваться.
Подскажите, где я косячу?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2016, 17:01
Ответы с готовыми решениями:

Передача массива в конструктор производного класса
Народ, задача такая: Создать абстрактный класс с виртуальной функцией – норма. Создать ...

Передача unique_ptr в конструктор другого класса
Как нужно передать unique_ptr в конструктор др. класса? есть такой код: .h файл: class...

Undefined reference или передача string в конструктор класса
Собственно проблема на этапе компиляции в main.cpp на 19 строке. Не понимаю, почему он требует 4...

Конструктор класса не видит конструктор по умолчанию другого класса
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора...

Передача параметров в конструктор при создании динамического массива
Добрый день! Есть довольно тривиальный класс: class Array1d{ int* ptr_; public: ...

3
meJevin
157 / 149 / 92
Регистрация: 18.11.2015
Сообщений: 677
Завершенные тесты: 1
24.04.2016, 17:25 2
По-моему, матрица - указатель на указатели. Типа, ты делаешь указатель на указатели, а каждый из тех указателей указывает на блок в памяти, который выделен под определенную строчку. А у тебя
Цитата Сообщение от IAlexey Посмотреть сообщение
int* xA
просто указатель на строчку, грубо говоря.

Добавлено через 1 минуту
То есть, если ты хочешь передать матрицу, то как-то так надо Matrix::Matrix(int xn, int** xA), где xn - размер (а он нужен один, потому что у тебя квадратная матрица), а xA - указатель на указатели (а те указатели указывают на строчки).

Добавлено через 1 минуту
Хотя, я и сам могу ошибаться.

Добавлено через 7 минут
А, у тебя статическая матрица, тогда так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const int size = 3;
 
void fill(int matrixSize, int matrix[][size]) {
    for (int i = 0; i < matrixSize; i++) {
        for (int j = 0; j < matrixSize; j++)
            matrix[i][j] = 5;
    }
}
 
int main() {
 
    int matrix[size][size];
 
    fill(size, matrix);
 
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++)
            std::cout << matrix[i][j] << " ";
        std::cout << "\n";
    }
 
    _getch();
}
Добавлено через 4 минуты
Но ты там пишешь
Цитата Сообщение от IAlexey Посмотреть сообщение
cout << "\nРазмер матрицы n = ";
cin >> xn;
Это значит, что она динамическая. Тогда так будет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void fill(int matrixSize, int** matrix) {
    for (int i = 0; i < matrixSize; i++) {
        for (int j = 0; j < matrixSize; j++)
            matrix[i][j] = 5;
    }
}
 
int main() {
    setlocale(LC_ALL, "");
 
    int N;
    std::cout << "Введите размер: ";
    std::cin >> N;
 
    int** matrix = new int*[N];
    for (int i = 0; i < N; i++)
        matrix[i] = new int[N];
 
    fill(N, matrix);
 
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++)
            std::cout << matrix[i][j] << " ";
        std::cout << "\n";
    }
 
    _getch();
}
1
zss
Модератор
Эксперт С++
8110 / 7243 / 4509
Регистрация: 18.12.2011
Сообщений: 19,163
Завершенные тесты: 1
24.04.2016, 17:32 3
Если A - динамический массив, то его строки не обязаны располагаться одна за другой.
Начало каждой строки надо определять заново.
C++
1
2
3
4
5
6
7
8
9
Matrix::Matrix(int xn,int** xA)      //размер матрицы, указатель начала массива 
{ 
    n = xn; 
    for (int i = 0; i < n; i++) 
    { 
        for (int j = 0; j < n; j++)// матрица квадратная 
            A[i][j] = xA[i][j];             
    } 
}
1
IAlexey
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 15
24.04.2016, 17:59  [ТС] 4
Спасибо за ответы. Вроде бы разобрался в чем накосячил. Я вам не отправил начало немного...
C++
1
2
3
4
5
6
7
8
9
10
11
int xn;
int xA[10][10];
cout << "\nРазмер матрицы n = "; 
cin >> xn; 
for (int i = 0; i < xn; i++) 
    for (int j = 0; j < xn; j++) 
    { 
        cout << "\nВвод элементов матрицы"; 
        cin >> xA[i][j]; 
    } 
    MatrixArray[element] = new Matrix(xn, &xA[0][0]);
через xn я передавал размер матрицы. Но сделал глупейшую ошибку, не учел, что задал массив как 10х10. Использовал всегда меньше, а шел то по указателю по порядку, вот и вылазили элементы 4-10 которые вообще не задавал.
Спасибо всем за ответы.
0
24.04.2016, 17:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2016, 17:59

передача двумерного массива
Разработать программу с шаблонными функциями для типов int, float и double. Данные в функции...

Передача двумерного массива
Искал по поиску , но так и не получилось у меня решить мою проблему с передачей динамического...

Передача двумерного массива
Помогите разобраться int func(int *arr) { arr=1; } void main(){ int arr; arr=1;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru