Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实现矩阵类加法运算符重载输出_C++_Matrix_Operator Overloading - Fatal编程技术网

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;icout问题是您的
运算符+
返回一个局部变量
矩阵
作为引用;这是未定义的行为。它应该按值返回,而不是按引用返回

确保您的
矩阵
类有一个复制构造函数,该构造函数接受
常量
输入,即

Matrix (const Matrix & x)

并在写入数组之前初始化数组。移动初始化代码(分配的两个循环)进入一个单独的私有函数,并从默认构造函数和复制构造函数调用它。

1)复制构造函数写入未初始化的指针。2)
运算符+
应该返回一个新的矩阵,而不是对当前矩阵的引用。此外,赋值运算符也有问题。为什么不直接使用
>std::vector
而不是所有这些指针?另一件事是,您应该通过常量引用而不是通过值来传递
矩阵对象。
友元矩阵运算符*(矩阵,矩阵);
应该是
友元矩阵运算符*(常量矩阵,常量矩阵&)
@PaulMcKenzie非常感谢:)赋值运算符与复制构造函数的问题相同,甚至更糟,因为创建了内存泄漏。@Abdallah您还需要修复赋值运算符。它的状态比复制构造函数更糟。
Matrix (const Matrix & x)