C++操作符重载
/*
Name: 矩阵类
Copyright: Nit-Acm Team
Author: Shelling
Date: 30-05-07 20:42
Description: 矩阵基本运算与功能实现
*/
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std ;
int m ;
struct Matrix
{
int row,col ;
vector<vector<int> >Container ;
vector<int>& operator [] (int T) //重载方括号运算符
{
return Container[T] ;
}
vector<int> operator [] (int T) const
{
return Container[T] ;
}
Matrix(){}//构造器
Matrix(int n):row(n),col(n),Container(vector<vector<int> >(n,vector<int>(n)) ){} //对称矩阵
Matrix(int row,int col):row(row),col(col),Container(vector<vector<int> >(row,vector<int>(col)) ){}
friend inline istream & operator >> (istream & is,Matrix & M) //输入流重载
{
for(int r = 0 ; r < M.row ; r++)
for(int c = 0 ; c < M.col ; c++)
is >> M.Container[r][c] ;
return is ;
}
friend inline ostream & operator << (ostream & os,const Matrix & M)
{
for(int r = 0 ; r < M.row ; r++)
{
cout << M[r][0] ;
for(int c = 1 ; c < M.col ; c++)
cout << ' ' << M[r][c] ;
cout << endl ;
}
return os;
}
Matrix operator * (const Matrix & M) //矩阵乘法
{
Matrix Res(row,M.col);
for(int i = 0 ; i < row ; i++)
for(int j = 0 ; j < M.col ; j++)
for(int k = 0 ; k < col ; k++)
Res[j] += Container[k] * M[k][j];
return Res ;
}
Matrix operator + (const Matrix & M) //矩阵加法
{
Matrix Res(row,col);
for(int i = 0 ; i < row ; i++)
for(int j = 0 ; j < col ; j++)
Res[j] = Container[j] + M[j];
return Res ;
}
Matrix operator + (const int t) //矩阵加法
{
Matrix Res(row,col);
for(int i = 0 ; i < row ; i++)
for(int j = 0 ; j < col ; j++)
Res[j] = Container[j] + t;
return Res ;
}
Matrix & operator *= (Matrix M) //自乘
{
Matrix Res(row,M.col);
for(int i = 0 ; i < row ; i++)
for(int j = 0 ; j < M.col ; j++)
for(int k = 0 ; k < col ; k++)
Res[j] += (Container[k] * M[k][j]);
return *this = Res ;
}
static Matrix E(const int & n) //单位矩阵
{
Matrix e(n) ;
for(int i = 0 ; i < n ; i++)
e = 1 ;
return e ;
}
};
int main()
{
Matrix A(2,3),B(3,3) ;
while(cin >> A >> B)
cout << A * B
}
operator 等号 重载
operator 方括号 重载
Name: 矩阵类
Copyright: Nit-Acm Team
Author: Shelling
Date: 30-05-07 20:42
Description: 矩阵基本运算与功能实现
*/
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std ;
int m ;
struct Matrix
{
int row,col ;
vector<vector<int> >Container ;
vector<int>& operator [] (int T) //重载方括号运算符
{
return Container[T] ;
}
vector<int> operator [] (int T) const
{
return Container[T] ;
}
Matrix(){}//构造器
Matrix(int n):row(n),col(n),Container(vector<vector<int> >(n,vector<int>(n)) ){} //对称矩阵
Matrix(int row,int col):row(row),col(col),Container(vector<vector<int> >(row,vector<int>(col)) ){}
friend inline istream & operator >> (istream & is,Matrix & M) //输入流重载
{
for(int r = 0 ; r < M.row ; r++)
for(int c = 0 ; c < M.col ; c++)
is >> M.Container[r][c] ;
return is ;
}
friend inline ostream & operator << (ostream & os,const Matrix & M)
{
for(int r = 0 ; r < M.row ; r++)
{
cout << M[r][0] ;
for(int c = 1 ; c < M.col ; c++)
cout << ' ' << M[r][c] ;
cout << endl ;
}
return os;
}
Matrix operator * (const Matrix & M) //矩阵乘法
{
Matrix Res(row,M.col);
for(int i = 0 ; i < row ; i++)
for(int j = 0 ; j < M.col ; j++)
for(int k = 0 ; k < col ; k++)
Res[j] += Container[k] * M[k][j];
return Res ;
}
Matrix operator + (const Matrix & M) //矩阵加法
{
Matrix Res(row,col);
for(int i = 0 ; i < row ; i++)
for(int j = 0 ; j < col ; j++)
Res[j] = Container[j] + M[j];
return Res ;
}
Matrix operator + (const int t) //矩阵加法
{
Matrix Res(row,col);
for(int i = 0 ; i < row ; i++)
for(int j = 0 ; j < col ; j++)
Res[j] = Container[j] + t;
return Res ;
}
Matrix & operator *= (Matrix M) //自乘
{
Matrix Res(row,M.col);
for(int i = 0 ; i < row ; i++)
for(int j = 0 ; j < M.col ; j++)
for(int k = 0 ; k < col ; k++)
Res[j] += (Container[k] * M[k][j]);
return *this = Res ;
}
static Matrix E(const int & n) //单位矩阵
{
Matrix e(n) ;
for(int i = 0 ; i < n ; i++)
e = 1 ;
return e ;
}
};
int main()
{
Matrix A(2,3),B(3,3) ;
while(cin >> A >> B)
cout << A * B
}
operator 等号 重载
operator 方括号 重载