Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860

Написать класс Матрица. Массив объектов класса Массив

20.06.2016, 10:25. Показов 4928. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать класс Матрица (в данном случае матрица – массив объектов класса Массив из предыдущего задания).
В классе реализовать следующие методы:
конструкторы (по умолчанию, с параметрами); деструктор; ввод с клавиатуры, вывод на экран (в виде методов). В этом же классе, перегрузить операции: +, += (сложение матриц); – (вычитание); = (присвоение); == (сравнение по элементам);
[] (взятие элемента с заданным индексом).

В общем застрял на присвоении. Помогите пожалуйста реализовать программу.
C++ (Qt)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <iostream>
#include <ctime>
#include <iomanip>
 
#define PI 3.1415956535
 
using namespace std;
 
class Matrix;
 
class Array
{
public:
    int x[5];
    Array(){
        for (int i = 0; i < 5; i++){
            x[i] = rand() % 21 - 10;
            //cout << x[i] << setw(4);
        }
        //cout << endl;
    }
 
    int& operator [](int i)
    {
        return x[i];
    }
    friend Matrix;
};
 
 
 
class Matrix
{
 
public:
    Array y[5];
    Matrix(){
 
        //y[0][0] = 1;
        //cout << y[0][0];
    }
 
    void show(){
        for (int i = 0; i < 5; i++){
            for (int j = 0; j < 5; j++){
                cout << setw(4) << y[i][j];
            }
            cout << endl;
        }
        cout << endl;
    }
 
    void edit(int a, int b){
        cin >> y[a][b];
    }
 
    Array& operator [](int i)
    {
        return y[i];
    }
 
    Matrix &operator +(Matrix N)
    {
        int i, j;
        Matrix temp;
        for (i = 0; i < 5; i++){
            for (j = 0; j < 5; j++){
                temp[i][j] = N.y[i][j] + y[i][j];
            }
        }
        return temp;
    }
 
    Matrix &operator -(Matrix N)
    {
        int i, j;
        Matrix temp;
        for (i = 0; i < 5; i++){
            for (j = 0; j < 5; j++){
                temp[i][j] = N.y[i][j] - y[i][j];
            }
        }
        return temp;
    }
    
    bool operator ==(Matrix N)
    {
        bool k=1;
        int i, j;
        Matrix temp;
        for (i = 0; i < 5; i++){
            for (j = 0; j < 5; j++){
                if (N.y[i][j] != y[i][j]){
                    k = 0;
                }
            }
        }
        return k;
    }
    
    /*
    //???????
    //не работает
    Matrix &operator =(Matrix N)
    {
        int i, j;
        Matrix temp;
        for (i = 0; i < 5; i++){
            for (j = 0; j < 5; j++){
                temp[i][j] = N.y[i][j];
            }
        }
        return temp;
    }*/
 
};
 
void main(){
    srand(time(NULL));
    Matrix m, n, r;
    m.show();
    cout << (m == m);
    //r.show();
    system("pause");
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.06.2016, 10:25
Ответы с готовыми решениями:

Написать класс «множество» – наследник класса «массив»
Ребята может есть что-то прошу помощи. Написать класс «множество» – наследник класса «массив» (множество понимается в привычном...

Определить класс Rectangle и класс Point. Объявить массив из n объектов класса Point. Написать функцию, определяющ
Определить класс Rectangle и класс Point. Объявить массив из n объектов класса Point. Написать функцию, определяющую, какая из точек...

Класс содержащий массив объектов другого класса
Добрый день. Нужно создать класс,содержащий массив объектов другого класса: ref class Queue1 { public: Queue1(void); ...

15
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
20.06.2016, 11:26
C++
1
2
3
4
5
6
7
8
9
10
Matrix &operator =(Matrix N)
    {
        int i, j;
        for (i = 0; i < 5; i++){
            for (j = 0; j < 5; j++){
                y[i][j] = N.y[i][j];
            }
        }
        return *this;
    }
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
20.06.2016, 16:39  [ТС]
return *this; Что это означает?
0
92 / 81 / 57
Регистрация: 19.02.2016
Сообщений: 336
20.06.2016, 16:53
Цитата Сообщение от Jman Посмотреть сообщение
return *this; Что это означает?
возвращает
C++
1
Matrix &operator
1
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
20.06.2016, 17:44  [ТС]
Спасибо. Подскажите пожалуйста, я сделал прототип методов и перегрузок. Но ругается на вот такое:
C++ (Qt)
1
2
3
4
Array& operator [](int i)
    {
        return y[i];
    }
Делаю
C++
1
Array& operator [](int i);
Выношу под класс:
C++
1
2
3
4
Array& :: operator [](int i)
    {
        return y[i];
    }
Ругается... Как правильно это вынести?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
20.06.2016, 22:59
Цитата Сообщение от Jman Посмотреть сообщение
Array& :: operator [](int i)
Array& Matrix::operator [](int i)
1
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
21.06.2016, 15:45  [ТС]
Спасибо получилось.
Добавлено через 2 часа 3 минуты
Народ подскажите, как правильно вывести в мейне все операции над матрицей. Сложение, вычитание, индексацию и тд...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
switch (menu_switch)
    {
        case 1:
        {   // перегурзка +
            SUM = FIRST + SECOND;
            SUM.Print();        
        }
        
        case 2:
        {
            SUB = FIRST - SECOND;
            SUB.Print();        // перегрузка -
        }
        
        case 3:
        {
            cout << a[0][0];
        }
    }
Пока дошел до такого...

Добавлено через 2 часа 13 минут
Помогите так же, как можно реализовать деструктор, сделал вот так:
C++
1
2
3
4
5
Matrix::~Matrix()
{
    cout << "Удаляем массив" << endl;
    delete [] MYMATRIX;
}
Не работает... Кажется потому, что не выделил память... Не знаю в общем нарвался на такие моменты. Помогите пожалуйста. Задачу почти решил..
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
21.06.2016, 21:15
Цитата Сообщение от Jman Посмотреть сообщение
как можно реализовать деструктор
Если ты нигде не используешь new, то никаких delete обычно в деструкторе быть не должно.
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
21.06.2016, 21:34  [ТС]
По заданию есть деструкторе. Но я не пойму, где нужно правильно выделить память, а потом в деструкторе ее очистить. Предполагаю что в классе Matrix нужно проделать некое такое:
C++
1
2
3
4
5
6
class Matrix
{
 
public:
    Array y = new int [5];
    Matrix();
~Matrix()
{
cout << "Удаляем массив" << endl;
delete [] Array;
}
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.06.2016, 01:59
Array y = new int [5];
C++
1
Array *y;
и в конструкторе:
C++
1
y = new Array[5];
а в деструкторе:
C++
1
delete[] y;
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
22.06.2016, 10:32  [ТС]
Сделал так в хедере:
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
29
30
31
32
#pragma once
#include <iostream>
#include <iomanip>
using namespace std;
 
class Matrix;
 
class Array
{
public:
    int MYARR[5];
    Array();
    int& operator [](int i);    //заполняем одномерный массив
    friend Matrix;
};
 
class Matrix
{
 
public:
    Array *MYMATRIX;
    Matrix();
    ~Matrix();
    void Message();
    void Print();
    void Edit(int a, int b);
    Array& operator [](int i);
    Matrix &operator +(Matrix N);
    Matrix &operator -(Matrix N);
    bool operator ==(Matrix N);
    Matrix &operator =(Matrix N);
};
Описание класса:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "MyArr.h"
#include <iomanip>
 
//***************************************** Описание прототипов *************************************//
// конструктор 
Array::Array()
{
    for (int i = 0; i < 5; i++)
    {
        MYARR[i] = rand() % 20;
    }
}
 
Matrix::Matrix()
{
    MYMATRIX = new Array[5];
}
 
int& Array :: operator [](int i)
{
    return MYARR[i];
}
//перегрузка индексирования
Array& Matrix::operator [](int i)
{
    return MYMATRIX[i];
}
//перегрузка оператора сложения
Matrix &Matrix :: operator +(Matrix N)
{
    Matrix BUFFER;
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            BUFFER[i][j] = N.MYMATRIX[i][j] + MYMATRIX[i][j];
        }
    }
    return BUFFER;
}
// перегружаем оператор вычитанием
Matrix &Matrix :: operator -(Matrix N)
{
    Matrix BUFFER;
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            BUFFER[i][j] = N.MYMATRIX[i][j] - MYMATRIX[i][j];
        }
    }
    return BUFFER;
}
 
//перегружаем сравнение по элементам
bool Matrix :: operator ==(Matrix N)
{
    bool ASSIGMENT = true;
    //Matrix BUFFER;
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if (N.MYMATRIX[i][j] != MYMATRIX[i][j])
            {
                ASSIGMENT = false;
            }
        }
    }
    return ASSIGMENT;
}
//перегружаем оператор присвоения возвращаем Matrix &operator
Matrix &Matrix :: operator =(Matrix N)
{
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            MYMATRIX[i][j] = N.MYMATRIX[i][j];
        }
    }
    return *this;
}
//удаляем массив
Matrix::~Matrix()
{
    cout << "Удаляем массив" << endl;
    delete [] MYMATRIX;
}
//сообщение при старте программы
void Matrix::Message()
{
    cout << "================= Реализация класса "Матрица" =================\n"
        << " * В классе реализовать следующие методы:\n"
        << " * конструкторы (по умолчанию, с параметрами);\n"
        << " * деструктор;\n"
        << " * ввод с клавиатуры, вывод на экран (в виде методов).\n"
        << " * В этом же классе, перегрузить операции:\n"
        << " * +, += (сложение матриц);\n"
        << " * – (вычитание);\n"
        << " * = (присвоение);\n"
        << " * == (сравнение по элементам);\n"
        << " * [] (взятие элемента с заданным индексом)." << endl;
    
    cout << "                       Выберите операцию                        \n"
        << "1....Сложение матриц\n"
        << "2....Вычитание матриц\n"
        << "3....Присвоение матриц\n"
        << "4....Сравнение матриц по элементам\n"
        << "5....Взятие элемента с заданным адресом\n"
        << "6....Вывод матрицы а\n" 
        << "7....Вывод матрицы b\n" << endl;
    
}
//метод вывода матрицы
void Matrix::Print()
{
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << setw(4) << MYMATRIX[i][j];
        }
        cout << endl;
    }
    cout << endl;
}
// изменение элементов матрицы
void Matrix::Edit(int a, int b)
{
    cin >> MYMATRIX[a][b];
}
Вылезает ошибка: MyMatrixClass_21.06.2016.exe вызвал срабатывание точки останова.
C++
1
2
3
4
5
6
7
8
void __CRTDECL operator delete(void* const block) noexcept
{
    #ifdef _DEBUG
    _free_dbg(block, _UNKNOWN_BLOCK);
    #else
    free(block);
    #endif
}
Мне кажется, что я не верно использую конструктор... Выбираю метод сложения матриц например. Вижу как в консоле срабатывает деструктор 3 раза и прога крешится.
Ткните пожалуйста, куда копать?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.06.2016, 10:51
Цитата Сообщение от Jman Посмотреть сообщение
Ткните пожалуйста, куда копать?
Ну, предположу, что как минимум помимо обычного конструктора тебе нужен конструктор копирования.
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
22.06.2016, 11:44  [ТС]
Вот так компилится и вроде работает:
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
// конструктор 
Array::Array()
{
    for (int i = 0; i < 5; i++)
    {
        MYARR[i] = rand() % 20;
    }
}
// конструктор Matrix
Matrix::Matrix()
{
    MYMATRIX = new Array[5];
}
//конструктор копирования
Matrix::Matrix(const Matrix &obj)
{
    MYMATRIX = new Array[5];
    //cout << "\nКонструктор копирования\n";
}
//деструктор
Matrix::~Matrix()
{
    delete[] MYMATRIX;
    cout << "\n Очищаем память \n";
}
Верное - ли это решение задачи?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.06.2016, 12:25
Цитата Сообщение от Jman Посмотреть сообщение
Верное - ли это решение задачи?
Конструктор копирования должен копировать.
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
22.06.2016, 19:18  [ТС]
Копировать сам конструктор? Какой в данном случае?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.06.2016, 19:25
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Конструктор копирования должен копировать.
Конструктор копирования должен копировать содержимое одного объекта в текущий.
В твоем случае - из переданной матрицы в текущую матрицу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2016, 19:25
Помогаю со студенческими работами здесь

Разработать класс Book, создать массив объектов класса
Разработать классы для описанных ниже объектов. Включить в класс методы set (), get (), show (). Определить другие методы. 4) Book:...

Передача объектов дочерних классов через массив объектов родительского класса в функцию
Здравствуйте. Возможно, вопрос больше относится к теории ООП, но все же я не решился задавать его в теме теории ООП, так как он кажется мне...

Массив объектов базового класса, позволяющий работать с набором объектов — чтение, вывод
Расширить программы с классами. Каждый разработанный класс считать базовым; для каждого такого класса описать производный класс - массив...

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив объектов класса из предыдущей лабы и в...

Как правильно создать массив объектов текущего класса в методе данного класса?
Привет! Ставится задача создания метода, который формирует массив объектов. Правильно ли делать этот метод внутри класса, экземпляром...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru