【发布时间】:2021-02-02 17:21:03
【问题描述】:
我试图理解为什么在简单的类定义中按引用传递有效,而按值传递却不行
#include <iostream>
class Rettangolo {
int a, b;
public:
Rettangolo (Rettangolo& r) {
a = r.a;
}
Rettangolo (int _a, int _b) : a(_a), b(_b) {};
Rettangolo operator+= (Rettangolo r1);
void print() {
std::cout << a << ", " << b;
}
};
Rettangolo Rettangolo::operator+= (Rettangolo r1) {
a += r1.a;
b += r1.b;
return *this;
};
int main() {
std::cout << "Hello World!\n";
Rettangolo recta (1, 2);
Rettangolo rectb (5, 6);
recta += rectb;
recta.print ();
}
如果我在 operator+= 的参数中使用 (Rettangolo r1) ,如上例所示,输出为“6,2”。 但是,如果我在参数中使用 (Rettangolo& r1),输出是“6, 8”,正如我所期望的那样
【问题讨论】:
-
仅供参考,
operator +=应该返回一个引用;不像您的价值副本。只是说。 -
此代码包含多个问题。您应该阅读复制构造函数和运算符重载。
-
您的复制构造函数应该采用 const 引用。
标签: c++ operator-overloading pass-by-reference