不热心的网友 2017-05-29 02:43 采纳率: 0%
浏览 1320

c++ 如何把这段代码类改为类模板

#include
using namespace std;

class JuZhen
{
private :
int Hang; //矩阵的行数
int Lie; //矩阵的列数
int **ptr; //用于动态分配矩阵空间所定义的指针

public:
JuZhen(int H=0, int L=0); //构造函数,动态分配内存存储矩阵元素
JuZhen(const JuZhen &JZ); //拷贝构造函数
~JuZhen(); //析构函数,注意释放内存

void InPut();       //输入矩阵元素
void Show();   //显示矩阵内容
JuZhen operator+(const JuZhen &JZ);  //重载操作符 '+' 实现两个矩阵相加
JuZhen operator-(const JuZhen &JZ);  //重载操作符 '-' 实现两个矩阵相加
JuZhen operator*(const JuZhen &JZ);  //重载操作符 '*' 实现两个矩阵相乘
JuZhen& operator=(const JuZhen &JZ); //重载赋值操作符 '=' 实现矩阵之间的赋值

};

JuZhen::JuZhen(int H, int L)
{
Hang = H;
Lie = L;
ptr = new int*[Hang]; //分配Hang个int*空间
if(ptr == NULL) //判断空间分配是否成功
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
for(int i=0; i<Hang; i++)
{
ptr[i] = new int[Lie];//让每一行的指针指向一个Lie大小的空间
if(ptr[i] == NULL)
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
}

for(int i=0; i<Hang; i++)//将矩阵元素默认值设置为-1
    for(int j=0; j<Lie; j++)
        ptr[i][j] = -1;

}

JuZhen::JuZhen(const JuZhen &JZ)
{
Hang = JZ.Hang;
Lie = JZ.Lie;
ptr = new int*[Hang]; //分配Hang个int*空间
if(ptr == NULL) //判断空间分配是否成功
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
for(int i=0; i<Hang; i++)
{
ptr[i] = new int[Lie];//让每一行的指针指向一个Lie大小的空间
if(ptr[i] == NULL)
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
}

for(int i=0; i<Hang; i++)   //复制矩阵元素
    for(int j=0; j<Lie; j++)
        ptr[i][j] = JZ.ptr[i][j];

}

JuZhen::~JuZhen()
{
for(int i=0; i<Hang; i++)
delete []ptr[i];
delete []ptr;
}

void JuZhen::InPut()
{
cout<<"这是一个 "< cout for(int i=0; i for(int j=0; j {
cout cin>>ptr[i][j];
}
}

void JuZhen::Show()
{
for(int i=0; i<Hang; i++)
{
for(int j=0; j<Lie; j++)
cout<<ptr[i][j]<<' ';
cout<<endl;
}
}

JuZhen JuZhen::operator +(const JuZhen &JZ)
{
if(Hang != JZ.Hang || Lie != JZ.Lie)
{
cout<<"两个矩阵大小不一致,加法操作失败"<<endl;
return JuZhen();
}

JuZhen temp(Hang,Lie);//创建临时对象存储两矩阵的和
for(int i=0; i<Hang; i++)
    for(int j=0; j<Lie; j++)
        temp.ptr[i][j] = ptr[i][j] + JZ.ptr[i][j];
return temp;

}

JuZhen JuZhen::operator -(const JuZhen &JZ)
{
if(Hang != JZ.Hang || Lie != JZ.Lie)
{
cout<<"两个矩阵大小不一致,减法操作失败"<<endl;
return JuZhen();
}

JuZhen temp(Hang,Lie);//创建临时对象存储两矩阵的差
for(int i=0; i<Hang; i++)
    for(int j=0; j<Lie; j++)
        temp.ptr[i][j] = ptr[i][j] - JZ.ptr[i][j];
return temp;

}

JuZhen JuZhen::operator *(const JuZhen &JZ)
{
if(Lie != JZ.Hang)
{
cout<<"两个矩阵行列不匹配,乘法操作失败"<<endl;
return JuZhen();
}

JuZhen temp(Hang,JZ.Lie);//创建临时对象存储两矩阵的积
for(int i=0; i<Hang; i++)
    for(int j=0; j<JZ.Lie; j++)
    {
        int sum = 0;
        for(int k=0; k<Lie; k++)
            sum += ptr[i][k] * JZ.ptr[k][j];
        temp.ptr[i][j] = sum;
    }

return temp;

}

JuZhen& JuZhen::operator =(const JuZhen &JZ)
{
if(this == &JZ) //防止自身赋值
return *this;

for(int i=0; i<Hang; i++)//释放原矩阵空间
    delete []ptr[i];
delete []ptr;

Hang = JZ.Hang;
Lie = JZ.Lie;
ptr = new int*[Hang];   //分配Hang个int*空间
if(ptr == NULL) //判断空间分配是否成功
{
    cerr<<"分配空间失败!"<<endl;
    exit(EXIT_FAILURE);
}
for(int i=0; i<Hang; i++)
{
    ptr[i] = new int[Lie];//让每一行的指针指向一个Lie大小的空间
    if(ptr[i] == NULL)
    {
        cerr<<"分配空间失败!"<<endl;
        exit(EXIT_FAILURE);
    }
}

for(int i=0; i<Hang; i++)   //复制矩阵元素
    for(int j=0; j<Lie; j++)
        ptr[i][j] = JZ.ptr[i][j];


return *this;

}
int min(int x,int y)
{return (x int main()
{ int h1,l1,hl;
char key;
cout cin>>h1>>l1;
hl=min(h1,l1);
JuZhen JZ1(h1,l1);
JuZhen JZ2(h1,l1);
JuZhen JZ3(h1,l1);
JuZhen JZ4(l1,h1);
JuZhen JZ5(hl,hl);
cout<<"--------------菜单--------------"< cout cin>>key;
switch (key) {
case '+':
cout<<"请为第一个矩阵输入元素:"<<endl;
JZ1.InPut();
cout<<"请为第二个矩阵输入元素:"<<endl;
JZ2.InPut();
cout<<"矩阵一:"<<endl;
JZ1.Show();
cout<<"矩阵二:"<<endl;
JZ2.Show();
cout<<"JZ1和JZ2的和是:"<<endl;
JZ3 = JZ1 + JZ2;
JZ3.Show();
break;
case '-':
cout<<"请为第一个矩阵输入元素:"<<endl;
JZ1.InPut();
cout<<"请为第二个矩阵输入元素:"<<endl;
JZ2.InPut();
cout<<"矩阵一:"<<endl;
JZ1.Show();
cout<<"矩阵二:"<<endl;
JZ2.Show();
cout<<"JZ1和JZ2的差是:"<<endl;
JZ3 = JZ1 - JZ2;
JZ3.Show();
break;
case '*':
cout<<"请为第一个矩阵输入元素:"<<endl;
JZ1.InPut();
cout<<"请为第二个矩阵输入元素:"<<endl;
JZ4.InPut();
cout<<"矩阵一:"<<endl;
JZ1.Show();
cout<<"矩阵二:"<<endl;
JZ4.Show();
cout<<"JZ1和JZ2的积是:"<<endl;
JZ5 = JZ1 * JZ4;
JZ5.Show();
break;
default:

    break;
}

}

  • 写回答

1条回答 默认 最新

  • 不热心的网友 2017-05-29 02:44
    关注

    #include
    using namespace std;

    class JuZhen
    {
    private :
    int Hang; //矩阵的行数
    int Lie; //矩阵的列数
    int **ptr; //用于动态分配矩阵空间所定义的指针

    public:
    JuZhen(int H=0, int L=0); //构造函数,动态分配内存存储矩阵元素
    JuZhen(const JuZhen &JZ); //拷贝构造函数
    ~JuZhen(); //析构函数,注意释放内存

    void InPut();       //输入矩阵元素
    void Show();   //显示矩阵内容
    JuZhen operator+(const JuZhen &JZ);  //重载操作符 '+' 实现两个矩阵相加
    JuZhen operator-(const JuZhen &JZ);  //重载操作符 '-' 实现两个矩阵相加
    JuZhen operator*(const JuZhen &JZ);  //重载操作符 '*' 实现两个矩阵相乘
    JuZhen& operator=(const JuZhen &JZ); //重载赋值操作符 '=' 实现矩阵之间的赋值
    

    };

    JuZhen::JuZhen(int H, int L)
    {
    Hang = H;
    Lie = L;
    ptr = new int*[Hang]; //分配Hang个int*空间
    if(ptr == NULL) //判断空间分配是否成功
    {
    cerr<<"分配空间失败!"<<endl;
    exit(EXIT_FAILURE);
    }
    for(int i=0; i<Hang; i++)
    {
    ptr[i] = new int[Lie];//让每一行的指针指向一个Lie大小的空间
    if(ptr[i] == NULL)
    {
    cerr<<"分配空间失败!"<<endl;
    exit(EXIT_FAILURE);
    }
    }

    for(int i=0; i<Hang; i++)//将矩阵元素默认值设置为-1
        for(int j=0; j<Lie; j++)
            ptr[i][j] = -1;
    

    }

    JuZhen::JuZhen(const JuZhen &JZ)
    {
    Hang = JZ.Hang;
    Lie = JZ.Lie;
    ptr = new int*[Hang]; //分配Hang个int*空间
    if(ptr == NULL) //判断空间分配是否成功
    {
    cerr<<"分配空间失败!"<<endl;
    exit(EXIT_FAILURE);
    }
    for(int i=0; i<Hang; i++)
    {
    ptr[i] = new int[Lie];//让每一行的指针指向一个Lie大小的空间
    if(ptr[i] == NULL)
    {
    cerr<<"分配空间失败!"<<endl;
    exit(EXIT_FAILURE);
    }
    }

    for(int i=0; i<Hang; i++)   //复制矩阵元素
        for(int j=0; j<Lie; j++)
            ptr[i][j] = JZ.ptr[i][j];
    

    }

    JuZhen::~JuZhen()
    {
    for(int i=0; i<Hang; i++)
    delete []ptr[i];
    delete []ptr;
    }

    void JuZhen::InPut()
    {
    cout<<"这是一个 "< cout for(int i=0; i for(int j=0; j {
    cout cin>>ptr[i][j];
    }
    }

    void JuZhen::Show()
    {
    for(int i=0; i<Hang; i++)
    {
    for(int j=0; j<Lie; j++)
    cout<<ptr[i][j]<<' ';
    cout<<endl;
    }
    }

    JuZhen JuZhen::operator +(const JuZhen &JZ)
    {
    if(Hang != JZ.Hang || Lie != JZ.Lie)
    {
    cout<<"两个矩阵大小不一致,加法操作失败"<<endl;
    return JuZhen();
    }

    JuZhen temp(Hang,Lie);//创建临时对象存储两矩阵的和
    for(int i=0; i<Hang; i++)
        for(int j=0; j<Lie; j++)
            temp.ptr[i][j] = ptr[i][j] + JZ.ptr[i][j];
    return temp;
    

    }

    JuZhen JuZhen::operator -(const JuZhen &JZ)
    {
    if(Hang != JZ.Hang || Lie != JZ.Lie)
    {
    cout<<"两个矩阵大小不一致,减法操作失败"<<endl;
    return JuZhen();
    }

    JuZhen temp(Hang,Lie);//创建临时对象存储两矩阵的差
    for(int i=0; i<Hang; i++)
        for(int j=0; j<Lie; j++)
            temp.ptr[i][j] = ptr[i][j] - JZ.ptr[i][j];
    return temp;
    

    }

    JuZhen JuZhen::operator *(const JuZhen &JZ)
    {
    if(Lie != JZ.Hang)
    {
    cout<<"两个矩阵行列不匹配,乘法操作失败"<<endl;
    return JuZhen();
    }

    JuZhen temp(Hang,JZ.Lie);//创建临时对象存储两矩阵的积
    for(int i=0; i<Hang; i++)
        for(int j=0; j<JZ.Lie; j++)
        {
            int sum = 0;
            for(int k=0; k<Lie; k++)
                sum += ptr[i][k] * JZ.ptr[k][j];
            temp.ptr[i][j] = sum;
        }
    
    return temp;
    

    }

    JuZhen& JuZhen::operator =(const JuZhen &JZ)
    {
    if(this == &JZ) //防止自身赋值
    return *this;

    for(int i=0; i<Hang; i++)//释放原矩阵空间
        delete []ptr[i];
    delete []ptr;
    
    Hang = JZ.Hang;
    Lie = JZ.Lie;
    ptr = new int*[Hang];   //分配Hang个int*空间
    if(ptr == NULL) //判断空间分配是否成功
    {
        cerr<<"分配空间失败!"<<endl;
        exit(EXIT_FAILURE);
    }
    for(int i=0; i<Hang; i++)
    {
        ptr[i] = new int[Lie];//让每一行的指针指向一个Lie大小的空间
        if(ptr[i] == NULL)
        {
            cerr<<"分配空间失败!"<<endl;
            exit(EXIT_FAILURE);
        }
    }
    
    for(int i=0; i<Hang; i++)   //复制矩阵元素
        for(int j=0; j<Lie; j++)
            ptr[i][j] = JZ.ptr[i][j];
    
    
    return *this;
    

    }
    int min(int x,int y)
    {return (x int main()
    { int h1,l1,hl;
    char key;
    cout cin>>h1>>l1;
    hl=min(h1,l1);
    JuZhen JZ1(h1,l1);
    JuZhen JZ2(h1,l1);
    JuZhen JZ3(h1,l1);
    JuZhen JZ4(l1,h1);
    JuZhen JZ5(hl,hl);
    cout<<"--------------菜单--------------"< cout cin>>key;
    switch (key) {
    case '+':
    cout<<"请为第一个矩阵输入元素:"<<endl;
    JZ1.InPut();
    cout<<"请为第二个矩阵输入元素:"<<endl;
    JZ2.InPut();
    cout<<"矩阵一:"<<endl;
    JZ1.Show();
    cout<<"矩阵二:"<<endl;
    JZ2.Show();
    cout<<"JZ1和JZ2的和是:"<<endl;
    JZ3 = JZ1 + JZ2;
    JZ3.Show();
    break;
    case '-':
    cout<<"请为第一个矩阵输入元素:"<<endl;
    JZ1.InPut();
    cout<<"请为第二个矩阵输入元素:"<<endl;
    JZ2.InPut();
    cout<<"矩阵一:"<<endl;
    JZ1.Show();
    cout<<"矩阵二:"<<endl;
    JZ2.Show();
    cout<<"JZ1和JZ2的差是:"<<endl;
    JZ3 = JZ1 - JZ2;
    JZ3.Show();
    break;
    case '*':
    cout<<"请为第一个矩阵输入元素:"<<endl;
    JZ1.InPut();
    cout<<"请为第二个矩阵输入元素:"<<endl;
    JZ4.InPut();
    cout<<"矩阵一:"<<endl;
    JZ1.Show();
    cout<<"矩阵二:"<<endl;
    JZ4.Show();
    cout<<"JZ1和JZ2的积是:"<<endl;
    JZ5 = JZ1 * JZ4;
    JZ5.Show();
    break;
    default:

        break;
    }
    

    }

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题