【发布时间】:2020-12-13 11:23:52
【问题描述】:
任务是重载运算符 + 以便添加两个数组。 Array 是一个有两个私有成员 int* data 和 int m(array of array) 的类。
void Array::setM(int m){
this->m = m;
this->data = new int[this->m];
}
int& Array::operator[](int i){
return this->data[i];
}
Array& Array::operator+(Array& a){
Array res;
if (this->m >= a.m) {
res.setM(this->m);
for (int i=0; i<this->m; i++){
res.data[i] = this->data[i] + a.data[i];
}
}
else if (this->m < a.m) {
res.setM(a.m);
for (int i=0; i<a.m; i++){
res.data[i] = this->data[i] + a.data[i];
}
}
Array& rez = res;
return rez;
}
这是主要的:
int main()
{
Array a(3);
Array& a1 = a;
a1[0] = 1;
a1[1] = 2;
a1[2] = 4;
Array b(3);
Array& b1 = b;
b1[0] = 1;
b1[1] = 2;
b1[2] = 4;
Array& c = a1.operator+(b1);
for (int i=0; i<3; i++){
cout<<c[i]<<" ";
}
return 0;
}
当返回类型为 Array 时,该函数工作正常,但当返回类型为 Array& 时,它返回 173104 4200736 4200896。我从 c++ 开始,所以引用让我有点困惑,我没有看到返回引用的函数点输入?
【问题讨论】:
-
operator+不应返回引用。只需返回一份。 -
带有引用的 kicker 是被引用的变量必须比引用的需要更长。
-
@cigien 你的意思是像这样的 Array operator+(Array& a)?
-
是的,没错,但参数应该是
const以及函数本身。甚至是免费功能Array operator+(Array const &, Array const &)。请参阅显示的链接@user4581301。
标签: c++ class reference operator-overloading