请问这个用c++怎么写

随机产生一个mn的100以内的正整数矩阵,输出这个矩阵,再随机产生一个no的100以内的正整数矩阵,输出这个矩阵,求这两个矩阵的乘积,放在一个新的矩阵中,输出所得矩阵。(m、n、o由键盘输入,需要判断m、n、o的合法性)


#include <iostream>
#include <random>
#include <vector>
#include <iomanip>
#include <cassert>
#include <stdexcept>

class Matrix
{
public:
    typedef int value_type;
    typedef std::size_t size_type;

    Matrix(size_type m, size_type n) : _m(m), _n(n)
    {
        if (m == 0 || n == 0)
            throw std::invalid_argument("invalid matrix size");
        _data.resize(m * n);
        std::random_device rd;
        std::mt19937 gen(rd());
        std::uniform_int_distribution<> uniform_dist(1, 100);
        for (size_type i = 0; i < _data.size(); i++)
            _data[i] = uniform_dist(gen);
    }

    size_type num_rows() const { return _m; }

    size_type num_cols() const { return _n; }

    value_type operator()(size_type i, size_type j) const
    {
        return _data[i * _n + j];
    }

    value_type &operator()(size_type i, size_type j)
    {
        return _data[i * _n + j];
    }

private:
    size_type _m;
    size_type _n;
    std::vector<value_type> _data;
};

inline Matrix operator*(const Matrix &lhs, const Matrix &rhs)
{
    if (lhs.num_cols() != rhs.num_rows())
        throw std::invalid_argument("matrix size mismatched");
    Matrix result(lhs.num_rows(), rhs.num_cols());
    for (std::size_t i = 0; i < result.num_rows(); i++)
    {
        for (std::size_t j = 0; j < result.num_cols(); j++)
        {
            int value = 0;
            for (std::size_t k = 0; k < lhs.num_cols(); k++)
                value += lhs(i, k) * rhs(k, j);
            result(i, j) = value;
        }
    }
    return result;
}

template <typename CharT, typename Traits>
std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os, const Matrix &matrix)
{
    for (std::size_t i = 0; i < matrix.num_rows(); i++)
    {
        os << '|';
        for (std::size_t j = 0; j < matrix.num_cols(); j++)
            os << std::setw(6) << matrix(i, j) << ' ';
        os << "|\n";
    }
    return os;
}

int main()
{
    std::cout << "Input m n o (>0): ";
    int m, n, o;
    std::cin >> m >> n >> o;
    if (m <= 0 || n <= 0 || o <= 0) {
        std::cerr << "invalid parameter\n";
        return -1;
    }
    Matrix A(m, n);
    Matrix B(n, o);
    std::cout << "A =\n"
              << A << '\n';
    std::cout << "B =\n"
              << B << '\n';
    std::cout << "A * B =\n"
              << A * B << '\n';
    return 0;
}