在容器上使用重载运算符
Using overloaded operator on container
我有一个简单的 class,它包含整数数组。我想重载 + 以将两个数组合并在一起。我定义了两个重载器。 + 和 =
class Money{
Money & operator =( const Money &a )
{
for( int i = 0; i < size ;i++ ) arr[i] = a.arr[i];
return *this;
}
Money & operator +( const Mone &a )
{
Money temp;
for( int i = 0; i < size ;i++ ){
temp.arr[i] = arr[i] + a.arr[i];
}
return temp;
}
private:
int arr[50];
int size = 50;
}
问题出在索引 0,它 returns 来自内存的随机数。我已经看到一些关于类似问题的问题,但是有 * 运算符(我会尝试找到它并 link 它),我从那里得到了我的运算符 =。是什么原因造成的?我将其调用为
Money a;
Money b;
Money d;
d = a + b;
// print array;
我是重载的新手,所以我很难分析和理解概念。
基本问题就在这里,与重载无关:
Money & operator +( const Mone &a ) {
Money temp;
:
return temp;
问题是你 return 对局部变量的引用,当函数 returns so 是一个悬空引用时,它被破坏,导致未定义的行为。
按值改为returnMoney
。
据我了解 operator + 中的问题,您正在创建一个临时变量 temp。该变量将一直存在,直到 "operator+" 的代码完成。当您 return 对该变量 id 的引用本质上是一个隐藏的指向它的指针时,代码完成该引用不再有效。相反,如果您按值更改代码和 return,则一切都应该正常工作。相反,=operator 的工作正常,因为您 return 的引用绑定到一个对象,该对象将在 "operator=" 调用结束后存在。
我有一个简单的 class,它包含整数数组。我想重载 + 以将两个数组合并在一起。我定义了两个重载器。 + 和 =
class Money{
Money & operator =( const Money &a )
{
for( int i = 0; i < size ;i++ ) arr[i] = a.arr[i];
return *this;
}
Money & operator +( const Mone &a )
{
Money temp;
for( int i = 0; i < size ;i++ ){
temp.arr[i] = arr[i] + a.arr[i];
}
return temp;
}
private:
int arr[50];
int size = 50;
}
问题出在索引 0,它 returns 来自内存的随机数。我已经看到一些关于类似问题的问题,但是有 * 运算符(我会尝试找到它并 link 它),我从那里得到了我的运算符 =。是什么原因造成的?我将其调用为
Money a;
Money b;
Money d;
d = a + b;
// print array;
我是重载的新手,所以我很难分析和理解概念。
基本问题就在这里,与重载无关:
Money & operator +( const Mone &a ) {
Money temp;
:
return temp;
问题是你 return 对局部变量的引用,当函数 returns so 是一个悬空引用时,它被破坏,导致未定义的行为。
按值改为returnMoney
。
据我了解 operator + 中的问题,您正在创建一个临时变量 temp。该变量将一直存在,直到 "operator+" 的代码完成。当您 return 对该变量 id 的引用本质上是一个隐藏的指向它的指针时,代码完成该引用不再有效。相反,如果您按值更改代码和 return,则一切都应该正常工作。相反,=operator 的工作正常,因为您 return 的引用绑定到一个对象,该对象将在 "operator=" 调用结束后存在。