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

    结果:

  • 相关阅读:
    no route to host
    修改文件失败,提示E509: 无法创建备份文件 (请加 ! 强制执行)
    OAuth2.0的四种授权模式
    Django--JWT认证
    Django--数据库ORM操作
    DRF中限流、过滤、排序、分页
    Django框架中序列化与反序列化与字段验证
    21.Django三种风格的模型继承
    20.第三方微博登录Django+Vue
    博客园图片点击放大功能
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12997184.html
Copyright © 2011-2022 走看看