zoukankan      html  css  js  c++  java
  • 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;
    }

    结果:

  • 相关阅读:
    Navicat远程连接服务器Mysql
    JSP与Servlet之间传值
    JSP获取绝对路径
    PIL的库学习
    科学计算与可视化
    预测球类比赛结果
    预测球类比赛结果
    汉诺塔问题
    有进度条圆周率计算
    turtle学习心得
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12997184.html
Copyright © 2011-2022 走看看