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;
}

结果:

posted @ 2020-06-01 10:48  川尘  阅读(325)  评论(0编辑  收藏  举报
`