成员函数重载运算符和全局函数重载运算符有什么本质区别
时间: 2023-05-27 18:05:17 浏览: 181
成员函数重载运算符是类中的一个函数,它的参数个数比普通成员函数多一个,且第一个参数是用于调用运算符的对象本身,而全局函数重载运算符则不属于任何类,它的参数个数与运算符的操作数数量相同。
本质区别在于成员函数重载运算符能够直接访问类的私有成员,而全局函数重载运算符则不能直接访问类的私有成员。此外,成员函数重载运算符可以被继承,而全局函数重载运算符不会被继承。
因此,选择使用哪种方式来重载运算符取决于具体的需求。如果需要访问类的私有成员,或者需要继承运算符重载函数,可以选择成员函数重载运算符;否则,可以选择全局函数重载运算符。
相关问题
成员函数和友元函数重载运算符时传参区别
在重载运算符时,成员函数和友元函数在传参方面也有所不同。
成员函数重载运算符的第一个参数是隐含的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)。
综上所述,在重载运算符时,成员函数和友元函数在传参方面也有所不同,开发者需要根据具体的情况选择适合的方式。
定义成员函数重载运算符“+”,使之实现两个课程对象的学时(period)相加。定义友元函数重载运算符“=-”,使之实现判断两个课程对象是否相同,即课程编号(id)相同。
在C++中,为了定义成员函数重载运算符`+`和友元函数重载运算符`==-`,你需要创建一个类,比如叫做`Course`,并在这两个操作符上提供特定的实现。
首先,定义成员函数重载加法`+`:
```cpp
class Course {
public:
// 定义课程的基本属性,如id和period
int id;
int period;
// 重载加法运算符+
Course operator+(const Course& other) {
Course result;
result.id = this->id + other.id; // 如果需要考虑id,此处加上
result.period = this->period + other.period;
return result;
}
};
```
在这个例子中,如果两个`Course`对象想要按照学时相加,就直接将它们的`period`字段相加。
接下来,定义友元函数重载等于运算符`==`,因为`==-`是一个错误的语法,我们将其理解为检查两个课程是否完全相同,包括`id`:
```cpp
// 将operator==声明为这个类的朋友,使得它可以访问私有数据
bool operator==(const Course& other) const {
return (this->id == other.id) && (this->period == other.period);
}
```
现在你可以这样使用这两个重载的运算符:
```cpp
Course c1(1, 50);
Course c2(2, 60);
Course sum = c1 + c2; // 相加学时
if (c1 == c2) { // 检查课程是否相同
cout << "Courses are the same." << endl;
} else {
cout << "Courses are different." << endl;
}
```
阅读全文