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

Класс Матрица - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ ошибки линковки с++(... http://www.cyberforum.ru/cpp-beginners/thread440922.html
помогите пожалуйста!! справится с ошибками линковки масив.obj : error LNK2001: unresolved external symbol "void __cdecl obr(int &,int *)" (?obr@@YAXAAHPAH@Z) масив.obj : error LNK2001: unresolved external symbol "void __cdecl vvod(int &,int *)" (?vvod@@YAXAAHPAH@Z) Debug/масив.exe : fatal error LNK1120: 2 unresolved externals Error executing link.exe. #include <iostream> #include <conio.h>...
C++ Нетбинс ругается создаю срр файл на нетбинсе самый обычный компилирую выводит окошку с сообщением невозможно создать папку nbproject! С чего бы? Как можно исправить? http://www.cyberforum.ru/cpp-beginners/thread440910.html
ошибка в считывание файла или записи C++
#include <iostream> #include <fstream> #include <cstdlib> #include <cstring> #include <altconio.h> #include <iomanip> using namespace std; struct br
C++ Вычислить уравнения
Добрый день! Помогите пожалуйста решить 2 задачи на Языке С++ 1. Вычислить y=√(3+√(6+⋯+ √(96+√99) ) ) 2. Вычислить p=(1-1/2^2 )(1-1/2^3 )…(1-1/n^2 ),где n>2
C++ NullReferenceException http://www.cyberforum.ru/cpp-beginners/thread440851.html
Здравствуйте, ребят. Второй месяц изучаю С++, вот на днях задался целью написать связанный список. К сожалению, материала по этой теме не столько много поэтому после прочтения двух статей я взялся за дело. Вот что у меня вышло: #include <stdafx.h> #include <iostream> #include <cstdlib> #include <string> using namespace std;
C++ Как управлять веб-камерой с помощью кода. Здравствуйте, как написать программу, которая будет использовать веб-камеру для съемки видео или фотографий. Знаете, что-то вроде motion detection хотелось реализовать, но не знаю как. P.S. веб-камера logitech QuickCam for Notebooks подробнее

Показать сообщение отдельно
Felsurt
5 / 5 / 0
Регистрация: 06.02.2012
Сообщений: 19
07.02.2012, 12:39     Класс Матрица
я бы считал определитель рекурсивно через разложение по строке

Цитата Сообщение от Игорь Миронюк Посмотреть сообщение
А еще думаю сделать конструктор матрицы, полученной из данной вычеркиванием определенной строки и столбца.
да, это удобный функционал
только его лучше реализовывать не конструктором, а методом класса (getMinor), так будет логичней


ну и обычно в заголовочниках пишут так
C++
1
friend std::istream& operator>>(std::istream& in, Matrix& mat);
и тогда никакой using там и не нужен

C++
1
void operator=(const Matrix& mat);
здесь очень грубая ошибка есть
оператор равно всегда должен возвращать ссылку на объект

C++
1
2
3
4
Matrix &operator=(const Matrix& mat) {
 ...
 return *this;
}
такое объявление позволяет писать подобный код:
C++
1
a = b = c;
и именно такого поведения программист ожидает от оператора равно любого класса.
это аналогично операторам ввода/вывода, которые так же должны возвращать ссылку на свой левый аргумент, что позволяет писать "конвейеры".

в методе element вы проверяете, что индекс не больше допустимого, но не проверяете обратного (меньше допустимого)
ну и для удобства, как мне кажется, для доступа к элементам можно было бы перегрузить оператор круглых скобок
именно круглых, т.к. оператор квадратных скобок обязан всегда принимать только один аргумент

если есть оператор + и оператор =, то почему бы не реализовать оператор +=? (аналогично к остальным операторам)
кстати, обычно реализуют оператор = и +=, как методы класса, а оператор + делают внешним реализованным через эти два примерно так

C++
1
2
3
Matrix operator+(const Matrix& mat) const {
   return Matrix(*this) += mat;
}
вы дали возможность пользователю умножить матрицу на число, но не дали возможности умножить число на матрицу
C++
1
2
3
4
Matrix m(...);
double d = ...;
m * d;  // OK
d * m;  // Fail
ну и все же возвращаясь к тому, что в классе должен быть лишь необходимый минимум
ваш класс задал оператор == и я, как бы того не хотел, теперь не смогу изменить критерий сравнения матриц (потому что среди перегруженный функций предпочтение всегда компилятор отдает методу класса)
и если вдруг в моей программе не важно равенство элементов матрицы, а лишь важно равенство их размерностей, то мне придется писать длинное некрасивое условие if всегда, когда понадобиться сравнить объекты
а вот если бы вы были чуточку милосердны и подумали о разработчиках, которые, быть может, станут пользоваться вашим классом, то вынесли бы оператор == за его пределы и объявили вообще в отдельном файле
и тогда бы я мог его подключить, а мог бы написать свой оператор и все были бы счастливы
(ну это не говоря о том, что свой класс, по хорошему, надо поместить в свое пространство имен, тогда можно все в одном файле объявить)
 
Текущее время: 22:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru