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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM