通过重载[],如何将值赋给类中的第二个数组成员?

时间:2015-12-05 04:07:51

标签: c++ arrays class operator-overloading member-functions

我是学习者。我正在进行运算符重载。我正在编写一个包含以下项目的代码: 1.具有两个成员数组的类 2.重载[]功能 如果我的类只有一个数组成员,我可以重载[]来分配值。但我该怎么做才能将值分配给第二个成员数组。以下是我的代码:

#include <iostream>
#include <cassert>
class Digit
{
private:
    int digit1[3]{0};
    int digit2[4]{0};

public:    
    int& operator[](const int index);

    ostream& operator<<(ostream& out);
};

int& Digit::operator[](const int index)
{
    return digit1[index];
}

ostream& Digit::operator<<(ostream& out)
{
    int loop;
    out << "{";
    for (loop = 0; loop < 10; loop++)
    {
        out << digit1[loop] << " ";
    }
    out << "}";

    return o;
}

int main()
{
    using namespace std;

    Digit n;
    n[0] = 4;
    n[1] = 3;
    n[2] = 4;


    n << cout;

    return 0;
}

在上面的代码中,如何重载[]来为digit2 [4]赋值?

1 个答案:

答案 0 :(得分:1)

operator[]是你自己的功能;你可以用你想要的任何方式重新解释索引 - 这是一个简单的参数。

例如,您可以说索引0..2代表digit1,而索引3及以上代表digit2

int& Digit::operator[](const int index)
{
    return index < 3 ? digit1[index] : digit2[index];
}

这只是解释index的一种可能方式。您可以说正数是digit1的索引,负数是digit2的索引:

int& Digit::operator[](const int index)
{
    return index >= 0 ? digit1[index] : digit2[-index];
}