友元运算符重载函数和成员运算符重载函数有什么不同?
时间: 2024-04-21 17:27:10 浏览: 328
友元运算符重载函数和成员运算符重载函数的区别在于:
1. 成员运算符重载函数是类的成员函数,而友元运算符重载函数不是类的成员函数。
2. 成员运算符重载函数使用隐式调用,即只需要在对象上使用运算符,而友元运算符重载函数需要显式调用。
3. 成员运算符重载函数可以访问类的私有成员,而友元运算符重载函数不能访问类的私有成员。
4. 友元运算符重载函数可以访问多个类的私有成员,而成员运算符重载函数只能访问当前类的私有成员。
总之,成员运算符重载函数适用于操作符左侧是类对象的情况,而友元运算符重载函数适用于需要访问多个类的私有成员的情况。
相关问题
(1)掌握函数重载技术 (2)运算符重载技术(成员函数和友元函数) 分别采用成员函数和友元函数重载实现复数的加法运算。
好的,我明白了您的问题。复数加法运算可以通过函数重载和运算符重载来实现。我将分别介绍成员函数重载和友元函数重载的方法。
1. 成员函数重载复数加法运算
成员函数重载复数加法运算,需要在复数类中定义一个成员函数,以实现复数对象与另一个复数对象相加的运算。具体步骤如下:
(1)在复数类中定义一个成员函数,函数名为“operator+”,并且函数参数为一个复数对象(例如:Complex)。
(2)在“operator+”函数中,计算两个复数对象的实部与虚部的和,得到一个新的复数对象。
(3)将新的复数对象作为返回值返回。
下面是一个简单的代码示例:
```cpp
class Complex {
public:
Complex operator+(const Complex& c) {
Complex res(real + c.real, imag + c.imag);
return res;
}
private:
double real, imag;
};
```
2. 友元函数重载复数加法运算
友元函数重载复数加法运算,需要在复数类外定义一个友元函数,以实现复数对象与另一个复数对象相加的运算。具体步骤如下:
(1)在复数类中声明友元函数“operator+”。
(2)在复数类外定义友元函数“operator+”,并且函数参数为两个复数对象(例如:Complex)。
(3)在“operator+”函数中,计算两个复数对象的实部与虚部的和,得到一个新的复数对象。
(4)将新的复数对象作为返回值返回。
下面是一个简单的代码示例:
```cpp
class Complex {
public:
friend Complex operator+(const Complex& c1, const Complex& c2) {
Complex res(c1.real + c2.real, c1.imag + c2.imag);
return res;
}
private:
double real, imag;
};
```
以上就是成员函数和友元函数分别重载复数加法运算的方法。希望能对您有所帮助!
友元函数,运算符重载 成员函数
友元函数是在类的外部定义的函数,但是可以访问类的私有成员和保护成员。通过将函数声明为友元函数,可以使其具有访问类的私有成员和保护成员的权限。
运算符重载是指通过重新定义已有的运算符,使其能够用于自定义的数据类型。运算符重载可以通过成员函数或者友元函数来实现。
成员函数的运算符重载是指将运算符重载函数定义为类的成员函数。在成员函数中,左操作数是调用该函数的对象,右操作数是传递给函数的参数。
下面是一个示例,演示了友元函数和成员函数的运算符重载:
```cpp
#include <iostream>
using namespace std;
class Complex {
private:
double real;
double imag;
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
// 友元函数的运算符重载
friend Complex operator+(const Complex& c1, const Complex& c2);
// 成员函数的运算符重载
Complex operator-(const Complex& c) {
return Complex(real - c.real, imag - c.imag);
}
void display() {
cout << real << " + " << imag << "i" << endl;
}
};
// 友元函数的运算符重载
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);
Complex c2(3.0, 4.0);
Complex c3 = c1 + c2; // 使用友元函数的运算符重载
Complex c4 = c1 - c2; // 使用成员函数的运算符重载
c3.display();
c4.display();
return 0;
}
```
阅读全文
相关推荐
















