友元函数重载运算符类内定义和类外定义的使用方法
时间: 2023-07-05 14:21:12 浏览: 119
友元函数重载运算符可以在类内和类外分别定义。类内定义的方式将会把友元函数的定义嵌入到类的定义中,而类外定义的方式则是在类外单独定义一个函数,将类作为参数传递进去进行运算符重载。
下面是类内定义运算符重载的示例,假设我们有一个`Complex`类,表示复数:
```cpp
class Complex {
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
Complex operator+(const Complex& other) const;
friend Complex operator-(const Complex& c1, const Complex& c2);
private:
double real, imag;
};
// 类内定义的运算符重载函数
Complex Complex::operator+(const Complex& other) const {
return Complex(real + other.real, imag + other.imag);
}
```
在上述示例中,我们在`Complex`类内定义了一个重载"+"运算符的函数,它接受一个`Complex`类型的参数`other`,返回一个`Complex`类型的对象。在函数中,我们可以访问`Complex`类的私有成员`real`和`imag`,并进行自定义的相加操作,最终返回一个新的`Complex`对象。
下面是类外定义运算符重载的示例,我们以`-`运算符为例:
```cpp
class Complex {
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
Complex operator+(const Complex& other) const;
friend Complex operator-(const Complex& c1, const Complex& c2);
private:
double real, imag;
};
// 类外定义的运算符重载函数
Complex operator-(const Complex& c1, const Complex& c2) {
return Complex(c1.real - c2.real, c1.imag - c2.imag);
}
```
在上述示例中,我们在`Complex`类外定义了一个重载"-"运算符的函数,它接受两个`Complex`类型的参数`c1`和`c2`,返回一个`Complex`类型的对象。在函数中,我们可以访问`Complex`类的私有成员`real`和`imag`,并进行自定义的相减操作,最终返回一个新的`Complex`对象。
需要注意的是,类内定义的运算符重载函数只能访问类的公有和私有成员,而类外定义的友元函数可以访问类的私有成员。因此,如果需要访问类的私有成员,必须使用类外定义的友元函数。
阅读全文