C++ 重写一元运算符
一元运算符就是只有一个操作数的运算符,比如-1、+1、a--、a++、--a、++a等。
重载“- ”运算符(也就是取相反数)
1. 在Rational.h文件种添加函数
Rational operator-();
2. 在Rational.cpp文件中实现
Rational Rational::operator- () { return Rational(-numerator, denominator); }
3. 测试
#include <iostream> #include "Rational.h" using namespace std; int main() { Rational r1(3, 2); Rational r2 = -r1; cout << "r1 = " << r1.toString() << endl; cout << "r2 = " << r2.toString() << endl; return 0; }
结果:
重载“++”运算符
我们知道,一元运算符++和--都有两种情况:一种是前缀(++var),一种是后缀(var++)。
那么C++如何分辨前缀++和后缀++呢?
C++通过使用一个特殊的伪参数来实现后缀形式,这就好像二元运算符一样。而前缀形式则不需要参数。
注意:前缀运算符是左值运算符费,而后缀不是。所以前缀运算符的重载函数返回时应该使用引用返回(加符号“&”)。
重载前缀++
前缀++和上面的-很像。
1. 声明
//重载前++运算符 Rational& operator++();
2. 实现
Rational& Rational::operator++() { numerator += denominator; return *this; }
3. 测试
#include <iostream> #include "Rational.h" using namespace std; int main() { Rational r1(3, 2); cout << "1. r1 = " << r1.toString() << endl; Rational r2 = ++ r1 + Rational(3,2); cout << "2. r1 = " << r1.toString() << endl; cout << "3. r2 = " << r2.toString() << endl; return 0; }
结果:
重载后缀++
1. 声明
//重载后++运算符 Rational operator++(int dump);
2. 实现
Rational Rational::operator++(int dump) { Rational temp(numerator, denominator); numerator += denominator; return temp; }
3. 测试
#include <iostream> #include "Rational.h" using namespace std; int main() { Rational r1(3, 2); cout << "1. r1 = " << r1.toString() << endl; Rational r2 = r1 ++ + Rational(3,2); cout << "2. r1 = " << r1.toString() << endl; cout << "3. r2 = " << r2.toString() << endl; return 0; }
结果: