那你能告诉我单目运算符在什么情况下重载成全局函数合适,又是在什么情况下重载为成员函数合适
时间: 2023-08-22 18:07:19 浏览: 89
单目运算符重载为全局函数和成员函数都是可行的,但在选择重载方式时需要注意一些细节。
一般来说,如果单目运算符的操作数是类对象本身,或者需要访问类的私有成员变量,那么建议将其重载为成员函数。例如,对于一个自定义的复数类,可以将取负运算符`-`重载为成员函数,如下所示:
```cpp
class Complex {
public:
Complex operator-() const {
return Complex(-real_, -imag_);
}
private:
double real_;
double imag_;
};
```
这样,就可以通过类对象来调用取负运算符,例如:
```cpp
Complex c1(1.0, 2.0);
Complex c2 = -c1;
```
另一方面,如果单目运算符的操作数不是类对象本身,或者不需要访问类的私有成员变量,那么可以将其重载为全局函数。例如,可以将递增运算符`++`重载为全局函数,如下所示:
```cpp
class Counter {
public:
Counter(int value) : value_(value) {}
int GetValue() const { return value_; }
private:
int value_;
};
Counter operator++(Counter& c) {
c = Counter(c.GetValue() + 1);
return c;
}
```
这样,就可以通过全局函数来调用递增运算符,例如:
```cpp
Counter c(0);
++c;
```
总之,单目运算符重载为全局函数和成员函数都是可行的,但在选择重载方式时需要根据具体情况进行判断。
阅读全文