Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Jman
43 / 43 / 10
Регистрация: 11.10.2015
Сообщений: 462
Завершенные тесты: 2
#1

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

20.06.2016, 10:25. Просмотров 353. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2016, 10:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать класс Матрица. Массив объектов класса Массив (C++):

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

Массив объектов класса как член другого класса - C++
Здравствуйте. У меня тут возникла проблемка #include &quot;main.h&quot; class player { public: player(); player(char*); ...

Массив объектов класса. Печать строк-членов класса. - C++
подскажите, как распечатать строки? #include &quot;myString.h&quot; #include &lt;iostream&gt; #define stop __asm nop void main() { ...

Разработать класс "Массив больших чисел", который состоит из объектов класса "Большие целые числа". Найти сумму элементов массива. - C++
Разработать класс &quot;Массив больших чисел&quot;, который состоит из объектов класса &quot;Большие целые числа&quot;. Найти сумму элементов массива. ...

Массив объектов класса - C++
Товарищи, доброго времени суток! Помогите, пож-та, найти ошибку в коде, всё перепроверил, не понимаю всё равно. Суть проги такая - 5...

Массив объектов класса - C++
Добрый день. При попытки создать массив объектов класса ошибка. Как в дальнейшем динамически изменять размер массива (добавлять-удалять...

15
nonedark2008
925 / 664 / 142
Регистрация: 28.07.2012
Сообщений: 1,808
20.06.2016, 11:26 #2
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
43 / 43 / 10
Регистрация: 11.10.2015
Сообщений: 462
Завершенные тесты: 2
20.06.2016, 16:39  [ТС] #3
return *this; Что это означает?
0
nstwf
87 / 77 / 32
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
20.06.2016, 16:53 #4
Цитата Сообщение от Jman Посмотреть сообщение
return *this; Что это означает?
возвращает
C++
1
Matrix &operator
1
Jman
43 / 43 / 10
Регистрация: 11.10.2015
Сообщений: 462
Завершенные тесты: 2
20.06.2016, 17:44  [ТС] #5
Спасибо. Подскажите пожалуйста, я сделал прототип методов и перегрузок. Но ругается на вот такое:
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
nonedark2008
925 / 664 / 142
Регистрация: 28.07.2012
Сообщений: 1,808
20.06.2016, 22:59 #6
Цитата Сообщение от Jman Посмотреть сообщение
Array& :: operator [](int i)
Array& Matrix::operator [](int i)
1
Jman
43 / 43 / 10
Регистрация: 11.10.2015
Сообщений: 462
Завершенные тесты: 2
21.06.2016, 15:45  [ТС] #7
Спасибо получилось.
Добавлено через 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
nonedark2008
925 / 664 / 142
Регистрация: 28.07.2012
Сообщений: 1,808
21.06.2016, 21:15 #8
Цитата Сообщение от Jman Посмотреть сообщение
как можно реализовать деструктор
Если ты нигде не используешь new, то никаких delete обычно в деструкторе быть не должно.
0
Jman
43 / 43 / 10
Регистрация: 11.10.2015
Сообщений: 462
Завершенные тесты: 2
21.06.2016, 21:34  [ТС] #9
По заданию есть деструкторе. Но я не пойму, где нужно правильно выделить память, а потом в деструкторе ее очистить. Предполагаю что в классе Matrix нужно проделать некое такое:
C++
1
2
3
4
5
6
class Matrix
{
 
public:
    Array y = new int [5];
    Matrix();
~Matrix()
{
cout << "Удаляем массив" << endl;
delete [] Array;
}
0
nonedark2008
925 / 664 / 142
Регистрация: 28.07.2012
Сообщений: 1,808
22.06.2016, 01:59 #10
Array y = new int [5];
C++
1
Array *y;
и в конструкторе:
C++
1
y = new Array[5];
а в деструкторе:
C++
1
delete[] y;
0
Jman
43 / 43 / 10
Регистрация: 11.10.2015
Сообщений: 462
Завершенные тесты: 2
22.06.2016, 10:32  [ТС] #11
Сделал так в хедере:
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
nonedark2008
925 / 664 / 142
Регистрация: 28.07.2012
Сообщений: 1,808
22.06.2016, 10:51 #12
Цитата Сообщение от Jman Посмотреть сообщение
Ткните пожалуйста, куда копать?
Ну, предположу, что как минимум помимо обычного конструктора тебе нужен конструктор копирования.
0
Jman
43 / 43 / 10
Регистрация: 11.10.2015
Сообщений: 462
Завершенные тесты: 2
22.06.2016, 11:44  [ТС] #13
Вот так компилится и вроде работает:
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
nonedark2008
925 / 664 / 142
Регистрация: 28.07.2012
Сообщений: 1,808
22.06.2016, 12:25 #14
Цитата Сообщение от Jman Посмотреть сообщение
Верное - ли это решение задачи?
Конструктор копирования должен копировать.
0
Jman
43 / 43 / 10
Регистрация: 11.10.2015
Сообщений: 462
Завершенные тесты: 2
22.06.2016, 19:18  [ТС] #15
Копировать сам конструктор? Какой в данном случае?
0
22.06.2016, 19:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2016, 19:18
Привет! Вот еще темы с ответами:

Массив объектов класса - C++
class abc { public: int x,y; }; abc all; int main() { all.x=5; all.x=6;

Массив объектов класса - C++
Всем привет! Я не так давно познакомился с классами в C++, прочитав несколько статей по этой теме решил попрактиковаться. Есть задача:...

Массив объектов класса - C++
Имеется класс : #include &lt;iostream&gt; class Pat { private : int patAge; char patName; public...

Массив объектов класса - C++
Здравствуйте, не могу разобраться как записать в массив объекты класса ObjectX. Подскажите пожалуйста. class ObjectX{ public: int...


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

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

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