c++ 友元函数 重载运算符
时间: 2023-11-03 16:59:46 浏览: 373
C++中,运算符重载可以通过友元函数或成员函数来实现。当运算符重载为友元函数时,该函数可以直接访问类的私有数据,而成员函数只能通过对象来访问类的成员。友元函数的定义通常在类的外部进行,而成员函数的定义在类的内部进行。
友元函数的重载运算符定义格式如下:
```
friend 返回类型 operator 运算符(参数列表);
```
成员函数的重载运算符定义格式如下:
```
返回类型 operator 运算符(参数列表) const;
```
请注意,这里的返回类型可以是任何类型,根据具体的需求进行选择。
相关问题
c++友元函数重载运算符
在C++中,可以使用友元函数来重载运算符。友元函数是一个独立于类的函数,但可以访问类的私有成员。重载运算符需要在友元函数内部实现。
例如,考虑一个名为Complex的类,该类代表复数。我们可以定义一个友元函数来重载加法运算符:
```
class Complex {
private:
int real, imag;
public:
Complex(int r = 0, int i = 0) {
real = r;
imag = i;
}
friend Complex operator+(const Complex& c1, const Complex& c2);
};
Complex operator+(const Complex& c1, const Complex& c2) {
Complex res;
res.real = c1.real + c2.real;
res.imag = c1.imag + c2.imag;
return res;
}
```
在上面的例子中,我们定义了一个友元函数operator+来重载加法运算符。这个函数使用const引用作为参数,因为我们不想修改传递进来的复数对象。友元函数可以直接访问类的私有成员变量,因此我们可以通过real和imag成员变量来计算两个复数对象的和。
然后,我们可以在主函数中使用加法运算符来实现两个复数对象的加法:
```
int main() {
Complex c1(3, 4);
Complex c2(2, 7);
Complex c3 = c1 + c2;
std::cout << "Real part: " << c3.real << ", Imaginary part: " << c3.imag << std::endl;
return 0;
}
```
上面的代码会输出:Real part: 5, Imaginary part: 11,这是两个复数对象的和的实部和虚部。注意,我们使用operator+来实现加法运算符,这是因为我们使用了友元函数来重载它。
c++友元函数运算符重载
C++中的运算符重载可以通过友元函数来实现。友元函数是定义在类外部的普通函数,但是可以访问类的所有私有成员。通过将运算符重载函数声明为类的友元函数,可以使该函数访问类的私有成员。
下面是一个示例代码,演示了如何通过友元函数实现运算符重载:
```c++
#include <iostream>
class Complex {
public:
Complex(double real = 0.0, double imag = 0.0) : real_(real), imag_(imag) {}
double real() const { return real_; }
double imag() const { return imag_; }
private:
double real_;
double imag_;
friend Complex operator+(const Complex& c1, const Complex& c2);
};
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;
std::cout << "real: " << c3.real() << ", imag: " << c3.imag() << std::endl;
return 0;
}
```
在上面的代码中,我们定义了一个Complex类,包含了两个私有成员变量real_和imag_,表示复数的实部和虚部。我们通过友元函数operator+来实现运算符重载,使得两个Complex对象可以通过"+"运算符相加。在友元函数operator+中,我们可以访问Complex类的私有成员变量real_和imag_,从而实现了运算符重载。
在main函数中,我们创建了两个Complex对象c1和c2,并通过运算符重载将它们相加,最终得到一个新的Complex对象c3。我们可以通过调用c3的real()和imag()方法来获取它的实部和虚部。
阅读全文