C++矩阵类的实现(只有加法)

 写这个类还是能学习到很多东西的,比如拷贝构造函数,友元函数,运算符的重载。以及对一些修饰符的理解。

 

#include <iostream>
#define INFINITE 999999;
#define INIT 100;
using namespace std;
class Matrix{
    public:
           Matrix(int m=1,int n=1){
              cout<<"ctr"<<endl;
              this->m=m;
              this->n=n;
              data=new double[m*n];
              for(int i=0;i<m*n;i++)
              {

                  data[i]=0.0;
              }}
           Matrix(const Matrix& matrix){
               cout<<"拷贝构造函数"<<endl;
               this->m=matrix.Get_m();
               this->n=matrix.Get_n();
               data=new double[matrix.Get_m()*matrix.Get_n()];
               for(int i=0;i<m*n;i++){
                data[i]=matrix.Get_i(i);
               }
           }
              ~Matrix(){
                  cout<<"hello"<<endl;
                  delete[] data;

              }
          double Get_i(int i) const{
            return data[i];
          }
          int Get_n() const{
          return n;
          }
          int Get_m() const{
          return m;
          }
          double& operator() ( int i, int j);
          Matrix operator+(Matrix matrix){
              if(matrix.Get_n()!=n||matrix.Get_m()!=m){
                cout<<"两个矩阵大小不一致"<<endl;
                return NULL;
              }
              Matrix matrix_this=*this;
              Matrix temp(matrix.Get_m(),matrix.Get_n());
              for(int i=1;i<=m;i++){
                for(int j=1;j<=n;j++){
                    temp(i,j)=matrix_this(i,j)+matrix(i,j);
                }
              }
              return temp;
          }
          Matrix operator+(double x)
          {

              Matrix temp(m,n);
              Matrix matrix_this=*this;
              for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    temp(i,j)=matrix_this(i,j)+x;
                }
            }
            return temp;
          }
          friend Matrix operator+(double x, Matrix matrix1);

           void print(){
               for(int i=0;i<m;i++)
               {
                   for(int j=0;j<n;j++)
                   {
                        cout<<data[(i)*n+j]<<" ";
                   }
                cout<<endl;

           }}
    private:
        double *data;
        int m=1;
        int n=1;
};

double& Matrix::operator()( int i,  int j)//取数操作
 {
               if(i>m||j>n)
               {
                   cout<<"超出索引范围"<<endl;
                   return data[m*n];
               }
               if(i<1||j<1)
               {

                   cout<<"超出索引范围"<<endl;
                   return data[m*n];
               }
               return data[(i-1)*n+j-1];

           }

Matrix operator+(double x, Matrix matrix1){
    Matrix temp(matrix1.Get_m(),matrix1.Get_n());

    for(int i=1;i<=matrix1.Get_m();i++)
    {
        for(int j=1;j<=matrix1.Get_n();j++){
            temp(i,j)=matrix1(i,j)+x;
        }
    }
    return temp;
}
int main(void)
{

   Matrix matrix1(5,5);
     Matrix matrix2(5,5);
    matrix1=5+matrix1;
    matrix2=matrix2+1;
    (matrix1+matrix2).print();




}

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值