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

    结果:

  • 相关阅读:
    vim常用命令总结
    深度学习之 GAN 进行 mnist 图片的生成
    javascript 中的类型
    架构设计小思
    [前端]如何让图片等比例缩放,同时撑满父级容器的长或宽
    深度学习之 seq2seq 进行 英文到法文的翻译
    深度学习之 cnn 进行 CIFAR10 分类
    深度学习之 rnn 台词生成
    深度学习之 mnist 手写数字识别
    前端页面,使用 dom 鼠标拖拽画一个矩形和监听键盘
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12997184.html
Copyright © 2011-2022 走看看