c++运算符重载为什么形参用引用
时间: 2023-07-05 08:03:14 浏览: 64
在C++中,运算符重载被实现为函数调用。重载运算符的函数可以像普通函数一样使用参数。因为在函数调用时,参数会被复制到函数的局部变量中,然后被使用。这样做可能会浪费大量的时间和内存,特别是在处理大型对象时。
为了避免这种情况,通常使用引用作为运算符重载函数的参数。引用允许函数直接使用参数,而不是复制它们。这样可以提高程序的效率,并减少不必要的内存开销。
此外,使用引用还可以避免在运算符重载函数中对参数进行修改时出现错误。因为引用是原始对象的别名,所以对引用的任何更改都会影响原始对象。这使得运算符重载函数更容易编写和理解。
相关问题
c++运算符重载怎么理解
C++运算符重载是一种特殊的函数重载,它允许我们自定义类的操作符行为,使得对象可以像内置类型一样进行运算,例如加减乘除等运算。运算符重载的语法形式如下:
```
返回类型 operator 运算符符号(形参列表) {
// 函数体
}
```
其中,`operator`是关键字,后面跟上要重载的运算符符号,形参列表可以为空或者包含任意数量的参数。重载运算符时,我们需要将其定义为类的成员函数或全局函数,具体视运算符的特性而定。
例如,我们可以定义一个名为`Complex`的类,实现复数的加法和减法运算符重载。其代码示例如下:
```c++
#include <iostream>
class Complex {
public:
Complex(double real = 0.0, double imag = 0.0) : m_real(real), m_imag(imag) {}
Complex operator+(const Complex& other) const {
return Complex(m_real + other.m_real, m_imag + other.m_imag);
}
Complex operator-(const Complex& other) const {
return Complex(m_real - other.m_real, m_imag - other.m_imag);
}
void print() const {
std::cout << m_real << "+" << m_imag << "i" << std::endl;
}
private:
double m_real;
double m_imag;
};
int main() {
Complex c1(1, 2);
Complex c2(3, 4);
Complex c3 = c1 + c2;
c3.print(); // 输出:4+6i
Complex c4 = c2 - c1;
c4.print(); // 输出:2+2i
return 0;
}
```
在上面的示例中,我们定义了一个名为`Complex`的类,其中包含实部和虚部两个私有数据成员。我们重载了加法运算符和减法运算符,使得两个`Complex`对象可以通过`+`和`-`进行运算。我们定义了两个成员函数`operator+`和`operator-`,它们分别重载了加法和减法运算符。这两个函数的返回类型都是`Complex`,并且都是常量成员函数,因为它们不会修改类的数据成员。我们还定义了一个成员函数`print`,用于打印复数对象的实部和虚部。在`main`函数中,我们创建了两个`Complex`对象`c1`和`c2`,并分别对它们进行加法和减法运算,得到了结果`c3`和`c4`。最后,我们分别输出了这两个结果对象的实部和虚部。
通过运算符重载,我们可以使得对象的运算行为更加符合直觉,使得代码更加易读易懂。同时,运算符重载也为我们提供了一种自定义类型的运算方式的途径。
C++普通函数重载运算符
C++中可以使用普通函数来重载运算符。普通函数重载运算符的语法格式为:
```
返回类型 operator 运算符(形参列表) {
// 函数体
}
```
其中,`operator`关键字后面跟着要重载的运算符,形参列表中的参数个数和类型要根据具体的运算符而定。需要注意的是,有些运算符必须作为成员函数进行重载,如前置运算符、后置运算符、下标运算符等。
下面是一个普通函数重载加法运算符的例子:
```cpp
#include <iostream>
using namespace std;
class Complex {
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
double real;
double imag;
};
Complex operator+(const Complex& c1, const Complex& c2) {
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
int main() {
Complex c1(1.0, 2.0), c2(3.0, 4.0);
Complex c3 = c1 + c2;
cout << "c1 + c2 = " << c3.real << " + " << c3.imag << "i" << endl;
return 0;
}
```
输出结果为:
```
c1 + c2 = 4 + 6i
```