C++ 实现矩阵类加法运算符重载输出
我试图实现一个矩阵类并重载+和=运算符。 问题是,当我添加两个矩阵时,会得到奇怪的输出,如图所示。C++ 实现矩阵类加法运算符重载输出,c++,matrix,operator-overloading,C++,Matrix,Operator Overloading,我试图实现一个矩阵类并重载+和=运算符。 问题是,当我添加两个矩阵时,会得到奇怪的输出,如图所示。 #包括 #包括 使用名称空间std; 类矩阵 { 整数**p,m,n; 公众: 矩阵(整数行,整数列) { m=行; n=col; p=新整数*[m]; for(int i=0;i
#包括
#包括
使用名称空间std;
类矩阵
{
整数**p,m,n;
公众:
矩阵(整数行,整数列)
{
m=行;
n=col;
p=新整数*[m];
for(int i=0;i>p[i][j];
}
}
}
无效显示()
{
for(int i=0;i cout问题是您的运算符+
返回一个局部变量矩阵
作为引用;这是未定义的行为。它应该按值返回,而不是按引用返回
确保您的矩阵
类有一个复制构造函数,该构造函数接受常量
输入,即
Matrix (const Matrix & x)
并在写入数组之前初始化数组。移动初始化代码(分配的两个循环)进入一个单独的私有函数,并从默认构造函数和复制构造函数调用它。1)复制构造函数写入未初始化的指针。2)运算符+
应该返回一个新的矩阵,而不是对当前矩阵的引用。此外,赋值运算符也有问题。为什么不直接使用>std::vector
而不是所有这些指针?另一件事是,您应该通过常量引用而不是通过值来传递矩阵对象。友元矩阵运算符*(矩阵,矩阵);
应该是友元矩阵运算符*(常量矩阵,常量矩阵&)
@PaulMcKenzie非常感谢:)赋值运算符与复制构造函数的问题相同,甚至更糟,因为创建了内存泄漏。@Abdallah您还需要修复赋值运算符。它的状态比复制构造函数更糟。
Matrix (const Matrix & x)