#include <iostream>
using namespace std;
class Matrix
{
private:
double mat_[4];
public:
Matrix(double num = 1);
Matrix(double n1, double n2, double n3, double n4);
friend ostream &operator<<(ostream &os, const Matrix &mat);
friend istream &operator>>(istream &is, Matrix &mat);
friend Matrix operator*(const Matrix &mat1, const Matrix &mat2);
Matrix operator+(const Matrix &mat2);
Matrix operator-(const Matrix &mat2);
Matrix operator-() { return (*this) * -1; }
Matrix operator*=(const Matrix &mat2) { return (*this) = (*this) * mat2; }
Matrix operator-=(const Matrix &mat2) { return (*this) = (*this) - mat2; }
Matrix operator+=(const Matrix &mat2) { return (*this) = (*this) + mat2; }
bool operator==(const Matrix &mat2);
bool operator!=(const Matrix &mat2) { return !operator==(mat2); }
};
bool Matrix::operator==(const Matrix &mat2)
{
return (mat_[0] == mat2.mat_[0] && mat_[1] == mat2.mat_[1] && mat_[2] == mat2.mat_[2] && mat_[3] == mat2.mat_[3]);
}
Matrix::Matrix(double n1, double n2, double n3, double n4)
{
mat_[0] = n1;
mat_[1] = n2;
mat_[2] = n3;
mat_[3] = n4;
}
Matrix::Matrix(double num)
{
mat_[0] = mat_[3] = num + (mat_[1] = mat_[2] = 0);
}
ostream &operator<<(ostream &os, const Matrix &mat)
{
cout << mat.mat_[0] << ' ' << mat.mat_[1] << endl
<< mat.mat_[2] << ' ' << mat.mat_[3];
return os;
}
istream &operator>>(istream &is, Matrix &mat)
{
for (int i = 0; i < 4; i++)
{
while (true)
{
cout << "A real number:";
cin >> mat.mat_[i];
if (cin.good())
{
cin.clear();
cin.sync();
break;
}
else
cout << "A real number is needed." << endl;
cin.clear();
cin.sync();
}
}
return is;
}
Matrix operator*(const Matrix &mat1, const Matrix &mat2)
{
return Matrix(mat1.mat_[0] * mat2.mat_[0] + mat1.mat_[1] * mat2.mat_[2], mat1.mat_[0] * mat2.mat_[1] + mat1.mat_[1] * mat2.mat_[3], mat1.mat_[2] * mat2.mat_[0] + mat1.mat_[3] * mat2.mat_[2], mat1.mat_[2] * mat2.mat_[1] + mat1.mat_[3] * mat2.mat_[3]);
}
Matrix Matrix::operator+(const Matrix &mat2)
{
return Matrix(mat_[0] + mat2.mat_[0], mat_[1] + mat2.mat_[1], mat_[2] + mat2.mat_[2], mat_[3] + mat2.mat_[3]);
}
Matrix Matrix::operator-(const Matrix &mat2)
{
return Matrix(mat_[0] - mat2.mat_[0], mat_[1] - mat2.mat_[1], mat_[2] - mat2.mat_[2], mat_[3] - mat2.mat_[3]);
}
int main()
{
Matrix A;
cin >> A;
cout << A;
}
一个简单的矩阵运算类
最新推荐文章于 2022-12-04 11:54:47 发布