392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
|
|||||||||||
1 | |||||||||||
матрица. клас12.02.2012, 17:08. Показов 2465. Ответов 24
Метки нет (Все метки)
Решил создать класс квадратных матриц. Вот что получилось. Все работает, но хотелось бы услышать
Ваше мнение и любые(ВСЕ) замечания matrix.hpp объявление
matrix.cpp реализация
0
|
12.02.2012, 17:08 | |
Ответы с готовыми решениями:
24
матрица. клас. 2 клас Letter, клас Person клас птиц Векторы+клас |
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|
12.02.2012, 19:02 | 2 |
1)
у вас неправильная логика работы операторов + и -. они никак не могут возвращать this. представьте себе ситуацию: int a,b,c; a=b+c; - в вашем случае переменная b изменится! (у вас он работает как оператор +=. только ссылку тогда уж возвращать надо.) 2) почему иногда (*this). а иногда -> ? 3) почему нет операторов * / ? 4) тока тип Инт ? ну а так в целом норм чо
2
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||||||
12.02.2012, 19:07 | 3 | |||||
а как например можно делить матрицы?
в таких случаях обычно делают проверку, что справа находится не тот же самый объекти и возвращают ссылку, те нечто вроде
1
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|
12.02.2012, 19:12 | 4 |
1
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
12.02.2012, 19:46 | 5 |
1
|
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
|
|
12.02.2012, 21:15 [ТС] | 6 |
нужно создавать новый объект внутри оператора и возвращать его?
Добавлено через 41 секунду ок, -> правильнее в данном случае Добавлено через 33 секунды умножение добавлю Добавлено через 36 секунд сначала доведу, а потом сделаю как шаблонный
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
12.02.2012, 21:17 | 7 |
Да, именно так. Причем лучше возвращать константный объект. Да и функции сами -,+,*,/ должны быть константными.
1
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
12.02.2012, 21:25 | 8 |
Смысл у операции деления матриц можно с небольшой натяжкой свести к умножению на обратную матрицу.
1
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
12.02.2012, 21:26 | 9 |
ага, а потом начнем возводить матрицы в степень/извлекать корни
1
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
12.02.2012, 21:30 | 10 |
Например, по аналогии с числами, матрицу A умножить на матрицу, обратную B.
Добавлено через 23 секунды Не по теме: Опаздываю :wall: Добавлено через 56 секунд retmas, насколько мне известно, для квадратных матриц определена операция возведения в степень.
1
|
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
|
|||||||||||
12.02.2012, 21:32 | 11 | ||||||||||
1. Нет обращения к конкретному элементу матрицы. Нельзя задать или получить произвольный элемент матрицы.
2. Напишите explicit перед конструктором с параметром.
Во-первых, они почему-то модифицируют операнд. Во-вторых, некоторые делают это неправильно. Например, оператор "-" складывает, вместо вычитания. В-третьих, результат оператора "-" константный. Получается, нельзя сделать
1
|
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
|
||||||||||||||||
12.02.2012, 21:48 [ТС] | 12 | |||||||||||||||
оператор сложения:
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
12.02.2012, 21:49 | 13 |
Mayonez, осли определён унарный оператор -.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
12.02.2012, 22:00 | 14 |
можно же возвращать const matrix&, тогда нельзя будет написать (m1 = m2) = m3;
вообще для матриц больших размерностей нужно быть осторожней с созданием новых матриц на лету к слову в бусте у Matrix возвращаются только ссылки да, у обратных матриц даже обозначение есть A^(-1), и в матлабе A/B дает решение системы AX = B, но в целом нахождение обратной матрицы более нетривиально чем весь представленный класс
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
12.02.2012, 22:14 | 15 |
Я про функцию operator= ничего не говорил. И как же вы будете возвращать ссылку на временный объект?
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
12.02.2012, 22:22 | 16 |
silent_1991, я утрировал. на мой взгляд вводить подобные операции лишнее.
вы же не писали, я надеюсь, изучая мат. дисциплины, подобные конструкции для матриц А и В: А / В. есть четко определенные операции: + и *. не стоит вводить новые не принятые(!) операции только от того, что они могли бы казаться кому-то разумными. думаю, если математик увидит А / В для матриц - он ошалеет и почему он должен догадываться, что это может значить А * В^(-1)
0
|
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
|
|
12.02.2012, 22:31 [ТС] | 17 |
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
12.02.2012, 22:33 | 18 |
Toshkarik, пардон, не понял о чем речь
кстати очень плохо, что не происходит проверки соответствия размерности матриц
0
|
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
|
|
12.02.2012, 22:36 [ТС] | 19 |
не совсем понял...
Добавлено через 50 секунд а если не совпадают, что возвращать? или бросать исключение?
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
12.02.2012, 22:39 | 20 |
да, какойнибудь std::range_error будет хорошим вариантом
ибо в матричных операциях недопустимо участие матриц несовместимых размерностей
1
|
12.02.2012, 22:39 | |
12.02.2012, 22:39 | |
Помогаю со студенческими работами здесь
20
клас myDate клас обработчик переделать клас создать клас HugeInt Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |