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

Класс "Матрица": конструктор, деструктор и перегрузка операторов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.81
maks_b1
 Аватар для maks_b1
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 29
20.12.2011, 22:02     Класс "Матрица": конструктор, деструктор и перегрузка операторов #1
Матрица – KMatrix
Методы:
конструкторы, деструктор;
операции: [], =, ==, !=, +, +=, –, –=, *, *=, <<, >>
функции:
Transpose – транспонирование матрицы,
Rows() – количество строк,
Cols() – количество колонок,
Swap() - обменять значения (т.е. матрицы).
Примечание:
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2011, 22:02     Класс "Матрица": конструктор, деструктор и перегрузка операторов
Посмотрите здесь:

Класс: конструктор и деструктор C++
C++ Перегрузка оператора ++ , деструктор и конструктор копий
Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор C++
C++ Создание класса с перегрузкой операторов конструктор и деструктор
Перегрузка операторов и конструктор копироваия C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
20.12.2011, 22:03     Класс "Матрица": конструктор, деструктор и перегрузка операторов #2
А что конкретно Вам непонятно?
Не выписывать же сюда весь справочник по ООП.
maks_b1
 Аватар для maks_b1
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 29
21.12.2011, 07:11  [ТС]     Класс "Матрица": конструктор, деструктор и перегрузка операторов #3
Я не понимаю,как это все реализовать?!
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
21.12.2011, 07:57     Класс "Матрица": конструктор, деструктор и перегрузка операторов #4

Не по теме:


Цитата Сообщение от maks_b1 Посмотреть сообщение
Я не понимаю,как это все реализовать?!
вы наверное на одном курсе учитесь ТЫК Вам надо скооперироваться. Задачи то аналогичные. Хоть одна голова хорошо, а две - некрасиво. Зато шансов на решение больше.



Добавлено через 27 минут
как пример.
файл-заголовок в котором вы будете описывать ваш класс может выглядеть так.
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
#ifndef KMATRIX_H
#define KMATRIX_H
 
#include <iostream>
using std::ostream;
using std::istream;
 
class KMatrix {
public:
    KMatrix(int = 10, int = 10); //конструктор по умолчанию если не указан размер матрицы то создается матрица 10 на 10 
    ~KMatrix(); //деструктор
 
    friend ostream &operator<<(ostream &);
    friend istream &operator>>(istream &);
 
    //объявление функций перегрузки операторов
    int &operator[](int);
    const KMatrix &operator=(const KMatrix &);
    bool operator==(const KMatrix &) const;
    bool operator!=(const KMatrix &right) const;
    const KMatrix &operator+=(const KMatrix &);
    const KMatrix &operator-=(const KMatrix &);
    const KMatrix &operator+(const KMatrix &);
    const KMatrix &operator-(const KMatrix &);
    const KMatrix &operator*=(const KMatrix &);
    const KMatrix &operator*(const KMatrix &); //для умножения матрицы на матрицу
    const KMatrix &operator*(const int &); //это для умножения матрицы на целое число
    const KMatrix &operator*(const float &); //это для умножения матрицы на вещественное  число
                                             // и т.д.
 
    //get-еры set-еры
    int getColumns() const;
    void setColumns(int);
    int getRows() const;
    void setRows(int);
 
private:
    int **myMatrix;
    int rows;
    int columns;
 
};
 
#endif
теперь выполнить реализацию каждого метода класса. начиная с конструктора. Заканчия всем остальным. Работенки не мало одном словом.
maks_b1
 Аватар для maks_b1
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 29
27.12.2011, 23:37  [ТС]     Класс "Матрица": конструктор, деструктор и перегрузка операторов #5
а можете , для примера описать какую либо функцию.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 06:53     Класс "Матрица": конструктор, деструктор и перегрузка операторов #6
Цитата Сообщение от maks_b1 Посмотреть сообщение
а можете , для примера описать какую либо функцию.
в качестве примеров написал перегрузку печати матрицы на стандартный вывод, умножения матрицы на целое число и оператора присвоения. Все выполнено в одном файле. (посчитал что так вам будет легче скомпилировать и запусить проект)
Прошу вас обратить внимание на способ перегрузки оператора [] для матрицы. Все дело в том что нельзя перегрузить оператор [][]. Возможно мой способ далек от совершенства но он работает. Если кто-то из людей знающих предложет что-то более простое но чтобы можно было использовать квадартные скобки, буду очень благодарен.
спрашивайте если что-то непонятно.
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#include <iostream>
using std::istream;
using std::ostream;
using std::cout;
using std::cin;
using std::endl;
 
#include <iomanip>
using std::setw;
 
#include <cstdlib>
using std::rand;
using std::srand;
 
#include <ctime>
using std::time;
 
class KMatrix {
 
    //overloading >>  operators
    friend ostream &operator<<(ostream &, const KMatrix&);
 
private:
    int **myMatrix;
    int rows;
    int columns;
 
    int &getValue(int r, int c) {
        return this->myMatrix[r][c];
    }
 
    //this class is help class to overload  matrix subscript operator [][]
    class KMatrixRow {
    public:
        KMatrixRow(KMatrix &k, int row) :
                km(k) {
            if (row < 0 || row >= k.rows) {
                x = 0;
            } else {
                x = row;
            }
        }
        int &operator[](int y) {
            return km.getValue(x, y);
        }
    private:
        KMatrix &km;
        int x; // row number
    };
 
public:
    KMatrix(int = 4, int = 4); //конструктор по умолчанию если не указан размер матрицы то создается матрица 10 на 10
    ~KMatrix(); //деструктор
 
    void setToZero(); //set all values of matrix to 0
    void setRandValues(int = 0, int = 100); //fill matrix with random values
 
    //overload subscript operator.
    KMatrixRow operator[](int);
 
    //overload multiplication operator
    //multiply matrix with int value
    KMatrix &operator*(const int &);
 
    //overload assignment operator
    KMatrix &operator=(KMatrix &);
 
};
 
//constructor
KMatrix::KMatrix(int r, int c) :
        rows(r > 0 ? r : 4), columns(c > 0 ? c : 4) {
    myMatrix = new int*[r];
    for (int i = 0; i < rows; ++i) {
        myMatrix[i] = new int[columns];
    }
    setToZero();
}
 
//fill matrix with random values
void KMatrix::setRandValues(int from, int to) {
    srand(time(NULL));
    for (int i = 0; i < this->rows; ++i) {
        for (int j = 0; j < this->columns; ++j) {
            this->myMatrix[i][j] = (from + rand() % to);
        }
    }
}
 
//overload assignment operator
KMatrix &KMatrix::operator=(KMatrix &right) {
    if (&right != this) { // проверяем не присваиваем ли объект сам себе
        for (int i = 0; i < rows; ++i) { //deallocate memory
            delete[] this->myMatrix[i]; //for each row
        }
        delete[] this->myMatrix; //and matrix
 
        this->rows = right.rows;
        this->columns = right.columns;
 
        //create new matrix
        this->myMatrix = new int*[right.rows];
        for (int i = 0; i < this->rows; ++i) {
            this->myMatrix[i] = new int[right.columns];
        }
 
        //fill new matrix with values of right matrix
        for (int i = 0; i < this->rows; ++i) {
            for (int j = 0; j < this->columns; ++j) {
                this->myMatrix[i][j] = right[i][j];
            }
        }
    }
    return *this;
}
 
//overload multiplication operator
KMatrix &KMatrix::operator*(const int &num) {
 
    for (int i = 0; i < this->rows; ++i) {
        for (int j = 0; j < this->columns; ++j) {
            this->myMatrix[i][j] = this->myMatrix[i][j]*num;
        }
    }
    return *this;
}
 
//overload subscript operator
KMatrix::KMatrixRow KMatrix::operator[](int x) {
    return KMatrixRow(*this, x);
}
 
//overloaded outsream operator;
ostream &operator<<(ostream &out, const KMatrix &km) {
    for (int i = 0; i < km.rows; ++i) {
        for (int j = 0; j < km.columns; ++j) {
            out << setw(4) << km.myMatrix[i][j];
        }
        out << endl;
    }
    return out;
}
 
//set all elements of matrix to 0
void KMatrix::setToZero() {
    for (int i = 0; i < this->rows; ++i) {
        for (int j = 0; j < this->columns; ++j) {
            this->myMatrix[i][j] = 0;
        }
    }
}
 
//destructor
KMatrix::~KMatrix() {
}
 
int main(void) {
 
    //create KMatrix instance
    KMatrix km(5, 5);
 
    cout << "After initialising\n";
    cout << km;
 
    //set some values
    km[0][0] = 10;
    km[0][1] = 15;
    km[2][3] = 33;
 
    //print results
    cout << "\n\nAfter setting same elements";
    cout << "\n"<< km;
 
    //fill with random values
    km.setRandValues();
 
    //print matrix with random values
    cout << "\n\nAfter setting random values";
    cout << "\n" << km;
 
    int a = 2;
    KMatrix newMatrix;
 
    newMatrix = km * a;
 
    cout << "\n\nAfter multiplying by int value (2)";
    cout << "\n" << newMatrix;
 
    cin.get();
    return 0;
}

Не по теме:

С вам пиво С Наступающим!



Добавлено через 1 минуту
- = ВЫВОД = -

After initialising
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0


After setting same elements
10 15 0 0 0
0 0 0 0 0
0 0 0 33 0
0 0 0 0 0
0 0 0 0 0


After setting random values
77 97 36 14 78
39 96 41 41 43
10 43 6 1 34
94 62 16 91 83
67 53 38 51 29


After multiplying by int value (2)
154 194 72 28 156
78 192 82 82 86
20 86 12 2 68
188 124 32 182 166
134 106 76 102 58

dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
28.12.2011, 10:32     Класс "Матрица": конструктор, деструктор и перегрузка операторов #7
greeezz, прочитал код, класс row Имхо здесь не нужен.

Цитата Сообщение от greeezz Посмотреть сообщение
предложет что-то более простое но чтобы можно было использовать квадартные скобки
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
#include <iostream.h>
#include <conio.h>
 
class matrix
{
   public:
 
   matrix(int, int, int = 0);
   ~matrix();
 
   float*& operator[](int) const;
 
   void operator*=(matrix& b);
   void operator/=(matrix& b);
 
 
   private:
 
   float **mPtr;
 
   int n;
 
   int m;
}
 
matrix::matrix(int nk, int mk, int init)
{
   **mPtr = new (float[nk])[mk];
 
   n = nk;
 
   m = mk;
 
   for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++)
     mPtr[i][j] = init;
}
 
matrix::~matrix ()
{
   delete [] mPtr;
}
 
float*& matrix::operator[](int nk) const
{
   if ((nk > n-1) || (nk < 0))
      cout << "Error: array overflow..." << endl;
   return mPtr[nk];
}
 
 
 
 
 
main ()
{
   clrscr();
 
   matrix m(10, 15);
 
   m[3][3] = 32;
 
   cout << m[3][3] << endl;
 
   getch();
 
   return 0;
}
PS перегружал для float.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 10:42     Класс "Матрица": конструктор, деструктор и перегрузка операторов #8
dimcoder, строки 166, 167, 168 имеют место быть (а именно работать) только потому что я выполненил перегрузку оператора [].
но сама реализация перегрузки на мой взгляд не очевидная.

Добавлено через 9 минут
Цитата Сообщение от dimcoder Посмотреть сообщение
#include <iostream.h>
и такое бывает?
строка 24. нет точки с запятой.
строка 28. вообще не понял. буду благодарен за разъяснения.
строка 55. int main() ...
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
28.12.2011, 10:56     Класс "Матрица": конструктор, деструктор и перегрузка операторов #9
Цитата Сообщение от greeezz Посмотреть сообщение
и такое бывает?
бывает. У меня только так и бывает, borland 3.0

Цитата Сообщение от greeezz Посмотреть сообщение
нет точки с запятой.
Странно, но у меня не требует. А так по идее конечно следовало бы её там стоять...


Цитата Сообщение от greeezz Посмотреть сообщение
строка 28. вообще не понял. буду благодарен за разъяснения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream.h>
#include <conio.h>
 
main ()
{
   float **mPtr;
   **mPtr = new (float[5])[6];
   mPtr[3][5] = 23;
   cout << mPtr[3][5];
   getch();
   return 0;
}
Ну как объяснить, выделяем динамическую память...
Цитата Сообщение от greeezz Посмотреть сообщение
строка 55. int main() ...
Старая привычка
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 11:06     Класс "Матрица": конструктор, деструктор и перегрузка операторов #10
Цитата Сообщение от dimcoder Посмотреть сообщение
borland 3.0
ну тогда понятно.
такое по всей видимости только в борланде и бывает. а у меня например
C++
1
**mPtr = new (float[5])[6];
error: array bound forbidden after parenthesized type-id
error: cannot convert 'float*' to 'float' in assignment

Добавлено через 4 минуты
вроде как в обычном с++ строки
C++
1
2
float **mPtr;
**mPtr = new (float[5])[6]
будут выглядеть
C++
1
2
3
4
5
   float **mPtr;
   mPtr = new float*[5];
   for(int i = 0; i < 5; ++i){
       mPtr[i] = new float[6];
   }
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
28.12.2011, 11:08     Класс "Матрица": конструктор, деструктор и перегрузка операторов #11
Цитата Сообщение от greeezz Посмотреть сообщение
error: array bound forbidden after parenthesized type-id
error: cannot convert 'float*' to 'float' in assignment
C++
1
*mPtr = new (float[5])[6];//Bez odnoy *
Если не пройдёт, создавайте как положено.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 11:11     Класс "Матрица": конструктор, деструктор и перегрузка операторов #12
Цитата Сообщение от dimcoder Посмотреть сообщение
C++
1
*mPtr = new (float[5])[6];//Bez odnoy *
Если не пройдёт, создавайте как положено.
error: array bound forbidden after parenthesized type-id

так вот в том и дело что, как положено, у меня получилось перегрузить оператор [] только с использованием так скажем вспомогательного класса.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
28.12.2011, 11:36     Класс "Матрица": конструктор, деструктор и перегрузка операторов #13
greeezz, вы же сами написали как правильно создать динамическую матрицу. Короче попробуйте это в http://liveworkspace.org/
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
#include <iostream>
using namespace std;
 
class matrix
{
   public:
 
   matrix(int, int, int = 0);
   ~matrix();
 
   float*& operator[](int) const;
 
   void operator*=(matrix& b);
   void operator/=(matrix& b);
 
 
   private:
 
   float **mPtr;
 
   int n;
 
   int m;
};
 
matrix::matrix(int nk, int mk, int init)
{
   //**mPtr = new (float[nk])[mk];
   mPtr = new float*[nk];
   for (int x = 0; x < nk; x++)
      mPtr[x] = new float[6];
 
   n = nk;
 
   m = mk;
 
   for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++)
    mPtr[i][j] = init;
}
 
matrix::~matrix ()
{
   delete [] mPtr;
}
 
float*& matrix::operator[](int nk) const
{
   if (nk > n-1)
      cout << "Error: array overflow..." << endl;
   return mPtr[nk];
}
 
 
 
 
 
main ()
{
   
 
   matrix m(10, 15);
 
   m[3][3] = 32;
 
   cout << m[3][3] << endl;
 
   return 0;
}
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 11:36     Класс "Матрица": конструктор, деструктор и перегрузка операторов #14
dimcoder,
спасибо!
а можете объяснить float*& operator[](int) ...
меня интересует *& в данной функции.

если сказать правильнее у меня ощущение что я не понимаю что возвращает функция
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
28.12.2011, 11:43     Класс "Матрица": конструктор, деструктор и перегрузка операторов #15
Цитата Сообщение от greeezz Посмотреть сообщение
*&
Вовращает указатель на разыменованный указатель. Хотя это заморочки... Можете амперсанд(&)убрать, не знаю нахрен я его туда вообще влепил :-D Надо подумать ________
Короче так работать тоже будет:
C++
1
float* operator[](int)
Но смысл вот в чём. Значит функция возвращает указатель, а там уж дела c++ и стандартного типа float, всё как у обычного массива. Хотя казалось бы...
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 11:50     Класс "Матрица": конструктор, деструктор и перегрузка операторов #16
dimcoder, считайте меня датошным.. но!
ваша функция
C++
1
2
3
4
5
6
float* matrix::operator[](int nk) const
{
   if (nk > n-1)
      cout << "Error: array overflow..." << endl;
   return mPtr[nk];
}
корректна только для квадратной матрицы.
а как быть если количество колонок и строк разное?
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
28.12.2011, 12:06     Класс "Матрица": конструктор, деструктор и перегрузка операторов #17
Вы имеете ввиду проверку на выход за границы? Здесь да, но в 7-едьмом сообщении я исправил эту ошибку (46-строка).
Цитата Сообщение от greeezz Посмотреть сообщение
корректна только для квадратной матрицы.
О_о Отожгли... ЛайвВоркСпэйс вам в помощь:
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
#include <iostream>
using namespace std;
 
class matrix
{
   public:
 
   matrix(int, int, int = 0);
   ~matrix();
 
   float*& operator[](int) const;
 
   void operator*=(matrix& b);
   void operator/=(matrix& b);
 
 
   private:
 
   float **mPtr;
 
   int n;
 
   int m;
};
 
matrix::matrix(int nk, int mk, int init)
{
   //**mPtr = new (float[nk])[mk];
   mPtr = new float*[nk];
   for (int x = 0; x < nk; x++)
      mPtr[x] = new float[6];
 
   n = nk;
 
   m = mk;
 
   for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++)
    mPtr[i][j] = init;
}
 
matrix::~matrix ()
{
   delete [] mPtr;
}
 
float*& matrix::operator[](int nk) const
{
   if ((nk > n-1) || (nk < 0))
      cout << "Error: array overflow..." << endl;
   return mPtr[nk];
}
 
 
 
 
 
main ()
{
   
 
   matrix m(10, 15); //NE KVAdratnYA MATRICA!
 
   m[4][3] = 32;
 
   cout << m[4][3] << endl;   //RABOTAET!
 
   return 0;
}
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 12:30     Класс "Матрица": конструктор, деструктор и перегрузка операторов #18
Цитата Сообщение от dimcoder Посмотреть сообщение
Вы имеете ввиду проверку на выход за границы? Здесь да, но в 7-едьмом сообщении я исправил эту ошибку (46-строка).
из седьмого сообщения:
C++
1
2
3
4
5
6
float*& matrix::operator[](int nk) const
{
   if ((nk > n-1) || (nk < 0))
      cout << "Error: array overflow..." << endl;
   return mPtr[nk];
}
в этой функции вы делаете проверку только на валидность количества колонок. а не строк и колонок. именно по этому я и говорю что будет корректно только для квадратной матрицы. когда nk равно mk

попробуйте
C++
1
2
3
4
5
6
7
8
9
10
11
int main ()
{
 
   matrix m(10, 15); //NE KVAdratnYA MATRICA!
 
   m[4][28] = 32;   // NE RABOTAET!
 
   cout << m[4][28] << endl;   // NE RABOTAET!
 
   return 0;
}
Добавлено через 11 минут
Цитата Сообщение от greeezz Посмотреть сообщение
if ((nk > n-1) || (nk < 0))
еще хотелось бы добавить.
к примеру в вашем объекте m = 10 (строки), n = 5 (колонки), так вот если
a[9][5] - ваше условие вернет ошибку. потому что (nk > n-1) будет истина.

Добавлено через 1 минуту
в свзяи с этим мой вопрос остается открытым. как быть если матрица не квадратная. (кроме той перегруки которую я сделал в самам начале с использование вспомагательного класса.)
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
28.12.2011, 12:36     Класс "Матрица": конструктор, деструктор и перегрузка операторов #19
Цитата Сообщение от greeezz Посмотреть сообщение
cout << m[4][28] << endl; // NE RABOTAET!
Так я и не спорю. Как не переделывайте функцию
Цитата Сообщение от dimcoder Посмотреть сообщение
float*& matrix::operator[](int nk) const
, проверку не проведёте. Мы получаем доступ к элементу при помощи перегруженного оператора [] типа float и ничего мы с этим не сделаем. Кстати, имхо непроверка на выход за границы это единственный минус.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2011, 20:59     Класс "Матрица": конструктор, деструктор и перегрузка операторов
Еще ссылки по теме:

C++ Матрица, перегрузка операторов
C++ Создать любой класс. Реализовать конструктор, деструктор, продемонстрировать работу
Класс, конструктор, деструктор, дружественные функции C++

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

Или воспользуйтесь поиском по форуму:
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 20:59     Класс "Матрица": конструктор, деструктор и перегрузка операторов #20
вроде все понял. спасибо большое.
Однако минус того что проверяется только количество строк и нельязя проверить количество колонок мне кажется существенным.
Yandex
Объявления
28.12.2011, 20:59     Класс "Матрица": конструктор, деструктор и перегрузка операторов
Ответ Создать тему
Опции темы

Текущее время: 06:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru