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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В наследнике не видно членов базового класса http://www.cyberforum.ru/cpp-beginners/thread1766825.html
в чем ошибка кто подскажет? )).... val не видит #include<iostream> #include<conio.h> using namespace std; class Base { private: int val; public:
C++ Найти причины возникновения ошибки в коде и исправить эту ошибку Подскажите пожалуйста, как исправить? http://www.cyberforum.ru/cpp-beginners/thread1766713.html
Небольшое затруднение C++
Доброго времени суток, форумчане. Почему этот код при введении значения yourword допустим "a b" выводит на экран не "a ba ba b", а "a a a"? #include <iostream> using namespace std; string trinity(string);
C++ Не могу переместить чётные элементы из одного массива в другой
Не получается у меня записать четные элементы из массива а в массив b, помогите!! #include <cstdlib> #include <iostream> #include <string.h> using namespace std; int main(int argc, char *argv) { setlocale(LC_ALL,"Russian"); int n;
C++ Ошибка конвертации типа данных http://www.cyberforum.ru/cpp-beginners/thread1766682.html
Доброго времени суток. Я столкнулся со следующей проблемой: определил переменные типа файл: #define filebooks "c:\\filebooks.txt" file *filevar; После чего при попытке их связать между собой сначала возникла ошибка filevar = fopen(filebooks, "rb"); Код ошибки: Unit1.cpp(73): E2034 Cannot convert 'FILE *' to 'void * *' В следующей операции возникли сразу 2 ошибки схожего характера
C++ В производном классе вызов приватного метода базового класса Добрый вечер. Помогите понять одну вещь. Имеется такое наследование: class test1 { public: void pubF() { privF(); } private: подробнее

Показать сообщение отдельно
Jman
43 / 43 / 10
Регистрация: 11.10.2015
Сообщений: 454
Завершенные тесты: 2
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 раза и прога крешится.
Ткните пожалуйста, куда копать?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru