Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 15

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

24.04.2016, 17:01. Показов 6667. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2016, 17:01
Ответы с готовыми решениями:

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

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

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

3
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
24.04.2016, 17:25
По-моему, матрица - указатель на указатели. Типа, ты делаешь указатель на указатели, а каждый из тех указателей указывает на блок в памяти, который выделен под определенную строчку. А у тебя
Цитата Сообщение от 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
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
24.04.2016, 17:32
Если 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
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 15
24.04.2016, 17:59  [ТС]
Спасибо за ответы. Вроде бы разобрался в чем накосячил. Я вам не отправил начало немного...
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2016, 17:59
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru