成员函数和友元函数重载运算符时传参区别
时间: 2024-03-23 08:39:38 浏览: 63
在重载运算符时,成员函数和友元函数在传参方面也有所不同。
成员函数重载运算符的第一个参数是隐含的this指针,它指向调用该成员函数的对象。因此,在成员函数重载运算符中,我们只需要传递一个参数即可。
友元函数重载运算符没有隐含的this指针,因此,它需要显式地传递所有的参数。在友元函数中,我们通常需要传递两个参数,第一个参数是一个对象,第二个参数是另一个对象或者其他需要的参数。
例如,我们可以使用如下代码重载加法运算符:
```
class Complex {
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
Complex operator+(const Complex& other) const;
private:
double real, imag;
};
Complex Complex::operator+(const Complex& other) const {
return Complex(real + other.real, imag + other.imag);
}
Complex operator+(const Complex& c1, const Complex& c2) {
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
```
在上面的例子中,我们可以看到,成员函数重载了加法运算符,而友元函数也重载了加法运算符。在成员函数中,我们只需要传递一个参数(other),而在友元函数中,我们需要传递两个参数(c1和c2)。
综上所述,在重载运算符时,成员函数和友元函数在传参方面也有所不同,开发者需要根据具体的情况选择适合的方式。
阅读全文