Palsur 2021-09-17 23:56 采纳率: 44.4%
浏览 62
已结题

C++实现矩阵类,函数参数float实在不会

C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。本次类实现一个矩阵类,基本定义如下:

class RMatrix
{
private:
      int rw;  //矩阵行数目
      int rc;  //矩阵列数目
      float *elmSet; //矩阵元素集合,其中 elmSet[i*rc+j]代表第i行,第j列的元素值
public:
    RMatrix();  //构造函数,令rw=0,rc=0,elmSet=0
    RMatrix(int row, int col);  //构造函数,令rw=row,rc=col,elmSet=new float[row*col] 元素值全为0
    ~RMatrix(); //析构函数,如果elmSet!=0,则delete [] elmSet
    float GetElem(int i, int j); //得到矩阵的元素值
void SetElem(int i, int j, float value); //设定矩阵的元素值,
int GetRow(); //得到矩阵的行数目,
int GetCol(); //得到矩阵的列数目,
void AugumentMatrix(); //对当前矩阵进行增广操作(即在右侧增加一列,该列的值全为0)
}

要求:
1) 初始化一个3*3的矩阵,并初始化其对角线上的值为1,其他值为0
2) 打印输出该矩阵来验证初始化结果是否准确
3) 调用AugumentMatrix,再打印输出该矩阵来验证初始化结果是否准确

RMatrix :: RMatrix(){rw=0;rc=0;elmSet=0;}
RMatrix :: RMatrix(int row, int col){rw=row;rc=col;elmSet=new float[row*col];}
RMatrix :: ~RMatrix(){
    for(int i=0;i<=rw*rc;++i){
        if(elmSet!=0){
            delete [] elmSet;
        }
    }
}
float RMatrix :: GetElem(int i, int j){
    for(int m=1;m<=i;++m){
        for(int n=1;n<=j;++n){
            cout<<elmSet[m*i+n];
            if(n==j) cout<<endl;
        }
    }
}
void RMatrix :: SetElem(int i, int j, float value){
    for(int m=1;m<=i;++m){
        for(int n=1;n<=j;++n){
            if(m==n) elmSet[m*i+n]=value;
        }
    }
}
int RMatrix :: GetRow(){
    int row;
    row=rw;
    return row;
}
int RMatrix :: GetCol(){
    int col;
    col=rc;
    return col;
}
int main(){
    int rw=3;
    int rc=3;
    float value=1.0f;
    RMatrix(); 
    RMatrix(rw, rc);    
    SetElem(rw, rc,**value**); 
    GetElem(rw, rc); 
}

显示SetElem 和GetElem was not declared in this scope,想问一下这个该怎么调整。

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-09-18 00:12
    关注

    得先声明变量才行;
    RMatrix mt(rw,rc);
    mt.SetElem(0,0,1.1);


    你的代码错误太多了。
    代码修改如下:

    #include <iostream>
    using namespace std;
    
    class RMatrix
    {
    private:
        int rw;  //矩阵行数目
        int rc;  //矩阵列数目
        float *elmSet; //矩阵元素集合,其中 elmSet[i*rc+j]代表第i行,第j列的元素值
    public:
        RMatrix();  //构造函数,令rw=0,rc=0,elmSet=0
        RMatrix(int row, int col);  //构造函数,令rw=row,rc=col,elmSet=new float[row*col] 元素值全为0
        ~RMatrix(); //析构函数,如果elmSet!=0,则delete [] elmSet
        float GetElem(int i, int j); //得到矩阵的元素值
        void SetElem(int i, int j, float value); //设定矩阵的元素值,
        int GetRow(); //得到矩阵的行数目,
        int GetCol(); //得到矩阵的列数目,
        void AugumentMatrix(); //对当前矩阵进行增广操作(即在右侧增加一列,该列的值全为0)
    };
    
    RMatrix::RMatrix(){rw = 0;rc = 0;elmSet = 0;}
    RMatrix::RMatrix(int row, int col)
    {
        rw = row;
        rc = col;
        elmSet = new float[rw*rc];
    }
    RMatrix::~RMatrix(){if(elmSet) delete[] elmSet; elmSet = 0;}
    
    float RMatrix::GetElem(int i, int j)
    {
        if(elmSet && i*rc+j < rc*rw ) return elmSet[i*rc+j];
        else return 0;
    }
    void RMatrix::SetElem(int i, int j, float value)
    {
        if(elmSet && i*rc+j < rc*rw)
            elmSet[i*rc+j] = value;
    }
    int RMatrix::GetRow(){return rw;}
    int RMatrix::GetCol(){return rc;}
    void RMatrix::AugumentMatrix(){} //
    int main()
    {
        int rw = 3;
        int rc = 3;
        float value = 1.0f;
        RMatrix mt(rw,rc);
        for (int i = 0;i<rw;i++)
        {
            for (int j = 0;j<rc;j++)
            {
                if(i==j)//对角线元素=1
                    mt.SetElem(i,j,value);
                else
                    mt.SetElem(i,j,0);
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月18日
  • 已采纳回答 9月18日
  • 创建了问题 9月17日

悬赏问题

  • ¥15 状态机/汽车转向灯/Sateflow
  • ¥15 这个有点复杂 有没有人看看
  • ¥15 用python如何确定子孙元素在父元素中的位置
  • ¥15 obj文件滤除异常高程
  • ¥15 用mathematicas或者matlab计算三重积分
  • ¥15 Loop unrolling的runtime计算
  • ¥100 NVMe-oF的Target端,开启attr_offload后,测试失败。
  • ¥100 有偿照片马赛克去掉,保留原始数据
  • ¥15 c# winform http报错,如何解决?
  • ¥15 统计软件及应用-r软件