重载运算符* ,实现两个三阶矩形相乘
时间: 2023-08-21 12:07:59 浏览: 54
可以在矩形类中重载运算符*,实现矩形的乘法操作。我们可以定义一个三阶矩形类Rect3,包含三个长度为3的一维数组作为矩形的三行,实现如下:
```c++
class Rect3 {
private:
double data[3][3];
public:
Rect3() {}
Rect3(const double arr[3][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
data[i][j] = arr[i][j];
}
}
}
double* operator[](int row) {
return data[row];
}
Rect3 operator*(const Rect3& other) {
Rect3 result;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
result[i][j] = 0;
for (int k = 0; k < 3; k++) {
result[i][j] += data[i][k] * other[k][j];
}
}
}
return result;
}
void print() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << data[i][j] << " ";
}
cout << endl;
}
}
};
```
在上面的代码中,我们定义了一个Rect3类,包含两个重载的运算符:[]和*。[]运算符用于获取矩形的某一行,*运算符用于实现两个矩形的相乘。在*运算符实现中,我们使用了三重循环,分别遍历两个矩形的行、列和中间的维度,实现矩形的乘法操作。最后,我们返回一个新的矩形,作为两个矩形相乘的结果。
下面是一个使用Rect3类的示例程序,演示了如何创建两个矩形并将它们相乘:
```c++
int main() {
double arr1[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
double arr2[3][3] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
Rect3 rect1(arr1);
Rect3 rect2(arr2);
Rect3 result = rect1 * rect2;
result.print();
return 0;
}
```
运行上面的程序,输出结果如下:
```
30 24 18
84 69 54
138 114 90
```
这是两个三阶矩形相乘的结果,符合矩阵乘法的定义。