【发布时间】:2012-09-29 01:55:03
【问题描述】:
我编写了一个 IntegerMatrix 类来添加我自己的方法来处理矩阵。现在我写了一个这样的函数:
IntegerMatrix** IntegerMatrix::multiplyMatrix(IntegerMatrix** table2)
(这是一个双指针,因为我持有大量指向 4x4 2D 数组的指针。)所以我可以这样做:
matrix1.multplyMatrix(matrix2)
一个小问题是* 没有为我自己的班级定义。所以我想重载这个运算符,我可以做这样的事情:
sum += this->table[i][k] * table2[k][j];
但是我怎样才能在重载运算符中获得正确的i和k,其定义如下:
IntegerMatrix IntegerMatrix::operator*(const IntegerMatrix & k);
我现在唯一想不通的问题是如何获得正确的值?
编辑:
我已经重写了这个,现在我有:
IntegerMatrix IntegerMatrix::operator*(const IntegerMatrix & table2)
{
int i, j, k;
int sum;
IntegerMatrix * result = new IntegerMatrix(SIZE);
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
sum = 0;
for (k = 0; k < SIZE; k++) {
sum += this->table[i][k] * table2[k][j];
}
result[i][j] = sum;
}
}
return *result;
}
这只是在 [] 上给我一个错误:
Binary '[' : 'IntegerMatrix' does not define this operator or a conversiont o a type acceptable to the predefined operator.
【问题讨论】:
-
为什么你的乘法函数使用双指针而不是引用?当您尝试您建议的
operator*时,您遇到了哪些错误?为什么矩阵乘法应该知道i和k?我完全不明白这个问题。 -
你确定你应该为二维数组使用动态内存来进行乘法和其他操作吗?
-
不解释原因而投反对票的人是愚蠢的。
-
sum += this->table[i][k] * table2[k][j];似乎是两个整数相乘,与矩阵乘法完全无关。 @Wug:也许他们确实发表了评论。 -
我没有说评论,我说解释。我没有看到任何说“-1 因为 X”的东西。刻意教人有助于他们学习,但不是,不会。这个问题本身的形式相当好,是一个关于特定算法的实用、可回答的问题。 (尽管有风格。)如果你看到某人的风格让你感到震惊,那么向他们展示好的风格是什么样子会更有帮助,而不是仅仅暗示他们错了。
标签: c++ operator-overloading matrix-multiplication