了解一些c ++代码

时间:2014-04-23 09:28:36

标签: c++ matrix

我在使用以下代码时遇到了困难。请看一下,并解释我无法理解的内容。如果不合适,请提出问题的标题。谢谢。

class matrix
{
    private:
        int m,n;
        int mat[10][10];
    public:
        void read_matrix();
        void show_matrix();
        matrix operator + (matrix mt);
};

matrix matrix::operator + (matrix mt)
{
    matrix msum;
    for(int i=0; i<m;++i)
    {
        for(int j=0;j<n;++j)
        {
            msum.mat[i][j]=mat[i][j]+mt.mat[i][j];
        }
    }
    return msum;
}

void matrix::show_matrix()
{
    for(int i=0;i<m;++i)
    {
        for(int j=0;j<n;++j)
        {
            cout<<setw(8)<<mat[i][j]<<endl;
        }
    }
}
  • 这一行发生了什么:

matrix matrix::operator + (matrix mt)

  • 在这一行中,中间只有mat[i][j]的价值是什么:

msum.mat[i][j]=mat[i][j]+mt.mat[i][j];

  • 为什么会有一些成员函数在类外定义?

2 个答案:

答案 0 :(得分:0)

::是范围运算符。如果我们在class之外定义方法的定义,我们使用this运算符来定义这个方法属于这个类。在这一行:matrix matrix::operator + (matrix mt)第一个矩阵是返回类型,第二个是它所属的类的名称, +符号表示,我们正在重载加运算符以执行一些自定义加操作。我们无法直接添加矩阵。但是用户只需在它们之间添加+就可以尝试添加两个矩阵。所以这里我们重载+运算符,所以每当用户在矩阵类对象之间添加+时,它就会添加矩阵(即二维数组)

mat[i][j]的值将在运行时从您作为输入提供的内容中选取。这是二维数组。

答案 1 :(得分:0)

  • 第一个问题:你正在超载+运营商。 c ++中的许多运算符都可以重载。如果你写

    int i = 4 + 5;

c ++确实知道+运算符的意思,但是当你写

Matrix mat1 = mat2 + mat3;

c ++不知道它,因为+默认情况下不处理Matrix类,因为它不是预定义类型。

在Matrix类中,您可以指定+运算符必须对该类执行的操作,因此您可以使用+运算符而不是

Matrix mat1 = mat2.sum(mat3);

  • 第二个问题:i和j是矩阵指数。您可以使用循环来为此变量分配临时值。您可以将其读作“对于从0到m的每个i值,对于从0到n的每个j值,总和值”。在这种情况下,您可以对Matrix的每个元素求和。

  • 第三个问题:通常就是这样。为了定义一个类,你将类声明放在.h文件中,将定义放在.cpp文件中,但有一些例外,比如内联方法。使用这种方法,用户可以包含.h文件并在不知情的情况下使用类接口,并且不对其进行任何修改。