c++矩阵乘法,要求用类封装

关键在于他有很多要求,不在于乘法的实现,要用类来封装矩阵,还要用模板,初学者感觉困难,求思路,最好有代码,谢

img

找找模板封装的例子看看,只是用typename T来代替数据类型而已。

img

参考如下:

#include <iostream>
using namespace std;

template <typename T>
class Matrix
{
private:
    int m_m,m_n; //m*n
    T** m_data;
public:
    Matrix();
    Matrix(int m,int n,T** data);//初始化时赋值
    
    //从键盘读入
    void setData(int m,int n);
    void show();
    Matrix operator*(const Matrix<T> &b);
    Matrix operator=(const Matrix<T> &b);
};

template <typename T>
Matrix<T> Matrix<T>::operator=(const Matrix<T> &b)
{
    Matrix<T> a(b.m_m,b.m_n,b.m_data);
    return a;
}

template <typename T>
Matrix<T> Matrix<T>::operator*(const Matrix<T> &b)
{
    int m = this->m_m;
    int n = b.m_n;
    //无法相乘的情况
    if(this->m_n != b.m_m)
        return Matrix();

    T** data = new T*[m];
        
    //计算
    for (int i=0;i<m;i++)
    {
        data[i] = new T[n];
        for (int j=0;j<n;j++)
        {
            data[i][j] = 0;
            for(int k = 0;k<this->m_n;k++)
                data[i][j] += this->m_data[i][k] * b.m_data[k][j];
        }
    }

    Matrix<T> cc(m,n,data);
    //释放空间
    for(int i=0;i<m;i++)
        delete[] data[i];
    delete[] data;
    data = 0;
    return cc;
}

template <typename T>
void Matrix<T>::show()
{
    if(m_data)
    {
        for (int i =0;i<m_m;i++)
        {
            for(int j=0;j<m_n;j++)
                cout << m_data[i][j] <<" ";
            cout <<endl;
        }
    }
}


template <typename T>
void Matrix<T>::setData(int m,int n)
{
    m_m =m;
    m_n = n;
    if(m_data)
    {
        for(int i=0;i<m_m;i++)
            delete[] m_data[i];
        delete[] m_data;
        m_data = 0;
    }
    cout <<"请输入"<<m<<"*"<<n<<"的矩阵:"<<endl;
    m_data = new T*[m];
    for (int i = 0;i<m;i++)
    {
        m_data[i] = new T[n];
        for(int j=0;j<n;j++)
            cin >>m_data[i][j];
    }
}


template <typename T>
Matrix<T>::Matrix()
{
    m_m = 0;
    m_n = 0;
    m_data = 0;
}

template <typename T>
Matrix<T>::Matrix(int m,int n,T** data)
{
    m_m = m;
    m_n = n;
    m_data = new T*[m];
    for (int i = 0;i<m;i++)
    {
        m_data[i] = new T[n];
        for(int j=0;j<n;j++)
            m_data[i][j] = data[i][j];
    }
}


int main()
{
    int m,n;
    
    cout <<"请输入第一个矩阵的m和n:";
    cin >>m>>n;
    cout << "请输入"<<m<<"*"<<n<<"的整数矩阵:"<<endl;
    int** data = new int*[m];
    for(int i = 0;i<m;i++)
    {
        data[i] = new int[n];
        for(int j=0;j<n;j++)
            cin >> data[i][j];
    }
    Matrix<int> ma(m,n,data);

    for (int i=0;i<m;i++)
    {
        delete[] data[i];
        data[i]=0;
    }
    delete[] data;

    //ma.show();
    
    //构建第二个矩阵
    cout << "请输入第二个矩阵的m和n:";
    cin >>m>>n;
    cout << "请输入"<<m<<"*"<<n<<"的整数矩阵:"<<endl;
    data = new int*[m];
    for(int i = 0;i<m;i++)
    {
        data[i] = new int[n];
        for(int j=0;j<n;j++)
            cin >> data[i][j];
    }
    Matrix<int> mb(m,n,data);

    for (int i=0;i<m;i++)
    {
        delete[] data[i];
        data[i]=0;
    }
    delete[] data;

    //mb.show();
    
    Matrix<int> c = ma*mb;
    c.show();
    return 0;

}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632