gpt4 book ai didi

c++ - 如何重载 + 来对 C++ 中的 2 个矩阵对象求和?

转载 作者:行者123 更新时间:2023-12-01 21:50:56 27 4
gpt4 key购买 nike

我有这门课

class Matrix
{
int size;

std::unique_ptr<std::unique_ptr<int[]>[]> val;

public:

Matrix(int size1)
{
size=size1;
val=std::make_unique< std::unique_ptr<int[]>[] >(size);

...
}

...移动构造函数,移动赋值运算符

    Matrix& operator+(Matrix &m)
{
Matrix sumMatrix(size);
for ( int i = 0; i < size; ++i)
{
for (int j = 0; j < size; ++j){
sumMatrix.val[i][j]=this->val[i][j]+m.val[i][j];
}

}
return sumMatrix;
}

和主要:

...
Matrix e=b+c;
std::cout<<"e="<<std::endl;
e.print();

我有这个错误:

warning: reference to local variable 'sumMatrix' returned [-Wreturn-local-addr] Matrix sumMatrix(size);

有人可以帮我解决这个问题吗?

最佳答案

按值返回,就像大多数情况下对 operator+ 所做的那样:

//   vvv--Removed &     vvvvv-----vvvvv--Const is more appropriate here
Matrix operator+(Matrix const &m) const { ... }

这将需要一个复制构造函数,请确保添加它。另请注意,您可能应该将 for 循环逻辑收集到 operator+= 中,并显着简化 operator+,同时为最终用户提供更多功能:

Matrix& operator+=(Matrix const& m) {
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
//vvv--No need for this-> in C++
val[i][j] += m.val[i][j];
}
}
return *this;
}

Matrix operator+(Matrix const& m) const {
Matrix sumMatrix{m}; // requires a copy constructor.
sumMatrix += *this;
return sumMatrix;
}

关于c++ - 如何重载 + 来对 C++ 中的 2 个矩阵对象求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61718942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com