zoukankan      html  css  js  c++  java
  • C++ 重写[]运算符

    数组下标运算符[]通常用于访问、修改一个对象中的数据域或者元素。而现在,我们希望它的功能是:访问有理数(C++ 有理数类)的分子和分母。

    首先我们在Rational.h文件的public中添加:

    int operator[](int index);

    然后在Rational.cpp文件中实现函数:

    int Rational::operator[](int index) {
        //若为0,则返回分子;否则,返回分母
        if (index == 0) {
            return this->numerator;
        } else {
            return this->denominator;
        }
    }

    我们测试一下结果:

    #include <iostream>
    #include "Rational.h"
    
    using namespace std;
    
    int main()
    {
        Rational r1(4, 2);
        Rational r2(2, 3);
    
        cout << r1[0] << "/" << r1[1] << endl;
        cout << r2[0] << "/" << r2[1] << endl;
    
        return 0;
    }

     可以看到,我们重载的运算符实现了正常的功能。

    但我们想要像修改数组元素一样修改分子或分母,是否可行呢?

    假如我么想要把r1的分子修改成3,分母修改成2。测试一下:

    r1[0] = 3;
    r1[1] = 2;

    发现编译器报错了。大概意思是运算符不能在左值的一边。

    为什么呢?

    这是因为我们要修改的值的地址,和分子或分母的地址不同。那么怎么样实现赋值操作呢?

    这就用到了我们之前说到的引用返回(C++ 引用返回

    也就是说,为函数签名

    int Rational::operator[](int index)

    加上符号“&”,变为

    int& Rational::operator[](int index)

    就可以了。

    我们来测试一下:

    #include <iostream>
    #include "Rational.h"
    
    using namespace std;
    
    int main()
    {
        Rational r1(4, 2);
        Rational r2(2, 3);
    
        r1[0] = 3;
        r1[1] = 2;
    
        cout << r1[0] << "/" << r1[1] << endl;
        cout << r2[0] << "/" << r2[1] << endl;
    
        return 0;
    }

  • 相关阅读:
    并行fp-growth图解(mahout)
    Sqoop的安装与使用
    深入理解Hadoop集群和网络
    datanode与namenode的通信原理
    Hadoop添加节点datanode(生产环境)
    Hadoop中HDFS工作原理
    实现hadoop中的机架感知
    hadoop集群监控工具Apache Ambari安装配置教程
    sdn测量综述
    SDN测量论文粗读(三)9.24
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12989556.html
Copyright © 2011-2022 走看看