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

Класс для работы с матрицами - Что дает перегруженный оператор индексирования? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить, какой из элементов повторяется в массиве наибольшее число раз http://www.cyberforum.ru/cpp-beginners/thread830198.html
Есть задание, но решить не могу, точнее не могу как задали. Можно задачу сделать с использование вложенного цикла, можно и без. Но вот до меня не доходит. Сама задача: Дан натуральный массив А размера n. Не создавая дополнительные массивы, определите, какой из элементов повторяется в массиве наибольшее число раз, и найдите его порядковый номер, ближайший к началу последовательности. Задачу...
C++ Перезагрузка операторов "неоднозначный operator" Не знаю в ту ли группу пишу, но все же.... Для моего класса есть несколько операторов присвоения const MyStr& operator +=(const MyStr& val); const MyStr& operator +=(const WCHAR *val); const MyStr& operator +=(const WCHAR val); const MyStr& operator +=(const char * val); const MyStr& operator +=(const char val); const MyStr& operator +=(const int val); все работает вроди бы нормально, но... http://www.cyberforum.ru/cpp-beginners/thread830191.html
Напечатать все слова последовательности, которые встречаются по одному разу C++
2)Дана последовательность слов. Напечатать все слова последовательности, которые встречаются в ней по одному разу.
Обнаружение повторяющихся слов C++
Здравствуйте! Никак не могу до конца понять пример из Страуструпа. Есть код, который обнаруживает повторяющиеся слова: // Обнаружение повторяющихся слов #include "std_lib_facilities.h" int main() { string previous = " ", current;
C++ Определить, сколько раз число, введенное пользователем, повторяется в массиве http://www.cyberforum.ru/cpp-beginners/thread830170.html
Как используя массивы создать программу, которая покажет сколько раз число, введенное пользователем повторяется в массиве? Например, есть массив int numbers = { {1,2,3,4,5}, {6,7,8,9,1}, {5,8,1,3,7} }; и когда программа просит ввести число, если мы вводим число 8, то программа показывает сообщение о том, что число 8 повторяется в массиве 2 раза. Помогите новичку (просьба написать легким языком...
C++ Определитель матрицы методом Гаусса Здравствуйте! Помогите написать программу на с++, которая на вычисляет определитель матрицы методом гаусса с выбором главного элемента по строке! подробнее

Показать сообщение отдельно
EvengarS
0 / 0 / 0
Регистрация: 02.04.2013
Сообщений: 33
07.04.2013, 01:15     Класс для работы с матрицами - Что дает перегруженный оператор индексирования?
Есть работающая программа, которая имеет:
  • конструктор с параметрами, который заполняет матрицу псевдослучайными числами
  • конструктор копирования
  • деструктор
  • метод для отображения матрицы
  • метод для отображения подматрицы указанного размера начиная с заданного элемента (пока без защиты от неправильных действий пользователя, но планируется)
  • перегруженный оператор индексирования
  • перегруженный оператор сложения


Кликните здесь для просмотра всего текста
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
133
134
135
136
137
138
#include <iostream>
#include <stdlib.h>
using namespace std;
 
class Matrix
{
private:
    int row, col;
//  static int numb;
    int ** IntData;
public:
    friend Matrix operator+ (const Matrix& l, const Matrix& r);
    Matrix(int _row, int _col): row(_row), col(_col) // конструктор c параметрами
    {
//      numb++;
        IntData = new int*[row];
        for (int i = 0; i < row; i++){
            IntData[i] = new int[col];
                 for (int j = 0; j < col; j++){
                     IntData[i][j] = rand();
                 }
             }
    }
    Matrix(const Matrix& m) // конструктор копирования
        {
        if (row != m.row || col != m.col)
        {
            for(int i = 0; i < row; ++i)
            delete [] IntData[i];
            delete [] IntData;
            row = m.row;
            col = m.col;
            IntData = new int*[row];
            for(int i = 0; i < row; ++i)
                IntData[i] = new int[col];
        }
        for (int i = 0; i < row; ++i)
            for (int j = 0; j < col; ++j)
                IntData[i][j] = m.IntData[i][j];
//      numb++;
        };
 
    ~Matrix()
    {for (int i = 0; i < row; i++){
        delete IntData[i];
        delete IntData;
//      numb--;
        }
    }
 
/*  void Fill()
    {
        cout << "\nNumber of rows: " ;
        cin >> row ;
        cout << "\nNumber of columns: " ;
        cin >> col ;
        cout << endl;
        for (int i = 0; i < row; i++){
             for (int j = 0; j < col; j++){
                 cout << "x[" << i << "][" << j << "]= ";
                 cin >> IntData[i][j];
             }}
    }
*/
 
    void Display()
    {
         cout << "\n Matrix \n";
         for (int i = 0; i < row; i++){
             cout << "\nRow: " << i << " >";        // нумеруем каждый ряд
             for (int j = 0; j < col; j++){
                 cout << " " << IntData[i][j]; // печатаем колонки
             }
         }
         return;
    }
 
        void SubMatrix()
        {
            int x, y, n, m;
            cout << "\nStart element [x][y]" << "\nx = ";
            cin >> x;
            cout << "y = ";
            cin >> y;
            cout << "Submatrix rows = ";
            cin >> m;
            cout << "Submatrix columns = ";
            cin >> n;
                 cout << "\n SubMatrix \n";
                 for (int i = x; i < m + x; i++){
                     cout << "\nRow: " << i << " >";
                     for (int j = y; j < n + y; j++){
                         cout << " " << IntData[i][j];
                     }
                 }
                 return;
        }
 
        int* operator[](int elem)
        {
            return IntData[elem];
        }
 
    /*  Matrix operator++ ()
        {
            col++;
            row++;
            return *this;
        } */
 
//      Matrix& operator=(const Matrix&){} ? не менять счетчик numb для присваивния
 
};
 
        Matrix operator+ (const Matrix& l, const Matrix& r)
        {
            if (l.col != r.col || l.row != r.row)
            cout << "wrong matrix size";
            Matrix result(l.row, l.col);
            for (int i = 0; i < l.row; ++i)
            for (int j = 0; j < l.col; ++j)
                result.IntData[i][j] = l.IntData[i][j] + r.IntData[i][j];
            return result;
        };
 
int main()
{
    Matrix m1(4, 5);
    m1.Display();
    Matrix m2(4, 5);
    m2.Display();
    Matrix m3 = m1 + m2;
    m3.Display();
    m3.SubMatrix();
 
    system("pause");
    return(0);
}


Вопросы и проблемы:
1. Что вообще дает перегруженный оператор индексирования? Он правильно написан? Писал просто по примерам.
2. Не получается сделать перегруженный оператор инкремента, который добавлял бы 1 строку и 1 столбец (пример попытки есть в коде в виде комментария).
3. Счетчик количества созданных объектов класса (переменная numb, тоже оставил в виде комментариев, выдает ошибку).
4. Методы вывода матрицы и подматрицы должны быть описаны в дружественном классе (у меня в основном). Когда выношу их в дружественный, они не видят переменных, хотя дружественный класс в основном прописывал.
5. Метод для ввода матрицы с клавиатуры Fill() подвешивает комп, если не хотите перезагружаться - не компилируйте его) Он мне в принципе и не нужен, но просто любобытно в чем там дело.
Может будут просто какие-то замечания по поводу реализации (более эффективные методы и т.п.).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru