【发布时间】:2019-06-23 05:52:23
【问题描述】:
所以我把它作为我的 class.cpp 文件
#include "matrixType3.h"
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
void matrixType3::setElement(int row, int col, int newvalue)
{
matrix[row][col] = newvalue;
}
double matrixType3::getElement(int row, int col)
{
int j = matrix[row][col];
return j;
}
void matrixType3::setMatrix(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9)
{
matrix[0][0] = x1;
matrix[0][1] = x2;
matrix[0][2] = x3;
matrix[1][0] = x4;
matrix[1][1] = x5;
matrix[1][2] = x6;
matrix[2][0] = x7;
matrix[2][1] = x8;
matrix[2][2] = x9;
}
void matrixType3::display()
{
for (int i = 0; i < 3; i++)
{
for (int r = 0; r < 3; r++)
{
cout << matrix[i][r] << " ";
}
cout << endl;
}
cout << endl;
}
void matrixType3::displayRow(int row)
{
for (int i = 0; i < 3; i++)
{
cout << matrix[row][i] << " ";
}
cout << endl;
}
void matrixType3::displayColumn(int col)
{
for (int i = 0; i < 3; i++)
{
cout << matrix[i][col] << endl;
}
}
void matrixType3::multipleMatrix(int c)
{
for (int i = 0; i < 3; i++)
{
for (int r = 0; r < 3; r++)
{
int j = matrix[i][r];
matrix[i][r] = j * c;
}
}
}
matrixType3 matrixType3::operator=(const matrixType3&mat) const
{
matrixType3 tempMatrix;
for (int i = 0; i < 3; i++)
{
for (int r = 0; r < 3; r++)
{
tempMatrix.matrix[i][r] = mat.matrix[i][r];
}
}
return tempMatrix;
}
matrixType3 matrixType3::operator+(const matrixType3& mat) const
{
matrixType3 tempMatrix;
for (int i = 0; i < 3; i++)
{
for (int r = 0; r < 3; r++)
{
tempMatrix.matrix[i][r] = mat.matrix[i][r] + matrix[i][r];
}
}
return tempMatrix;
}
matrixType3 matrixType3::operator-(const matrixType3& mat) const
{
matrixType3 tempMatrix;
for (int i = 0; i < 3; i++)
{
for (int r = 0; r < 3; r++)
{
tempMatrix.matrix[i][r] = matrix[i][r] - mat.matrix[i][r];
}
}
return tempMatrix;
}
matrixType3 matrixType3::operator*(const matrixType3& mat) const
{
matrixType3 tempMatrix;
for (int i = 0; i < 3; i++)
{
for (int r = 0; r < 3; r++)
{
for (int k = 0; k < 3; k++)
{
tempMatrix.matrix[i][r] = tempMatrix.matrix[i][r] + matrix[i][k] * mat.matrix[k][r];
}
}
}
return tempMatrix;
}
matrixType3 matrixType3::operator*(const int&num) const
{
matrixType3 tempMatrix;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
tempMatrix.matrix[i][j] = matrix[i][j] * num;
}
}
return tempMatrix;
}
bool matrixType3::operator==(const matrixType3& mat) const
{
for (int i = 0; i < 3; i++)
{
for (int r = 0; r < 3; r++)
{
if (matrix[i][r] != mat.matrix[i][r])
return false;
}
}
return true;
}
matrixType3::matrixType3()
{
for (int i = 0; i < 3; i++)
{
for (int c = 0; c < 3; c++)
{
matrix[i][c] = 0;
}
}
}
matrixType3::matrixType3(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9)
{
matrix[0][0] = x1;
matrix[0][1] = x2;
matrix[0][2] = x3;
matrix[1][0] = x4;
matrix[1][1] = x5;
matrix[1][2] = x6;
matrix[2][0] = x7;
matrix[2][1] = x8;
matrix[2][2] = x9;
}
matrixType3::~matrixType3()
{
}
但是,我的问题是运算符重载函数不起作用。 source.cpp 文件针对除所有运算符重载函数之外的所有其他成员函数运行。我想知道是否有人可以看到这段代码有什么问题?因为当我尝试 C = A * B 时,它只是在三乘三矩阵中返回构造的 0 的 c 矩阵。 该类只是应该采用 3x3 矩阵并对其进行编辑。 运算符重载用于 +、-、*、== 和 =。 作为旁注,编译器没有显示错误,但重载功能不起作用。
【问题讨论】:
-
您的赋值运算符看起来很不寻常。通常的签名应该是
matrixType3& matrixType3::operator=(const matrixType3 &other)。它不应该是const也不应该返回const引用。它应该将other的值分配给*this的成员并返回*this。 (第二种风格可能是移动赋值运算符。)
标签: c++ matrix operator-overloading