C++操作符重载

来源:互联网 发布:java编译成class工具 编辑:程序博客网 时间:2024/05/16 01:01

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
}

原创粉丝点击