Операции с матрицами в C++
Путем перегрузки базовых операторов существенно упрощается процесс работы с такими математическими структурами, как матрицы. Здесь создадим специальный программный код, в котором предусмотрим возможность выполнять некоторые наиболее простые операции с матрицами, а именно складывать матрицы и умножать их. Более точно, решим следующие задачи. Создадим класс для работы с квадратными матрицами. Элементы матрицы реализуются в виде двумерного массива-поля класса. Перегрузим оператор [ ] так, чтобы можно было индексировать объекты - только теперь используется два индекса, поскольку соответствующее поле объекта является двумерным массивом. Для вычисления суммы матриц перегрузим оператор сложения, а для вычисления произведения матриц перегрузим оператор умножения. Программный код приведен примере.
#includeusing namespace std; //Размер квадратной матрицы: const int n=3; //Класс для реализации матриц: class Matrix{ public: //Поле - двумерный массив: int matr[n][n]; //Перегрузка оператора []: int *operator[](int k){ return matr[k];} //Перегрузка оператора сложения +: Matrix operator+(Matrix obj){ Matrix tmp(0); for(int i=0; i < n; i++) for(int j=0; j < n; j++) tmp[i][j]=matr[i][j]+obj[i][j]; return tmp;} //Перегрузка оператора умножения *: Matrix operator*(Matrix obj){ Matrix tmp(0); for(int i=0; i < n; i++) for(int j=0; j < n; j++) for(int k=0; k < n; k++) tmp[i][j]+=matr[i][k]*obj[k][j]; return tmp;} //Метод для отображения значений матрицы: void show(){ for(int i=0; i < n; i++){ for(int j=0; j < n; j++){ printf("%3d",matr[i][j]); } cout << endl; } } //Конструктор с аргументом: Matrix(int k){ for(int i=0; i < n; i++) for(int j=0; j < n; j++) matr[i][j]=k; } //Конструктор с аргументом: Matrix(){ for(int i=0; i < n; i++) for(int j=0; j < n; j++) matr[i][j]=rand()%5-2; } }; int main(){ //Создание объектов: Matrix A,B,C(0),D(0); cout << "Matrix A:\n"; A.show(); cout << "Matrix B:\n"; B.show(); //Сумма матриц: cout << "Matrix C=A+B:\n"; C=A+B; C.show(); //Произведение матриц: cout << "Matrix D=A*B:\n"; D=A*B; D.show(); return 0;}