如何输入和输出方括号运算符[]

时间:2018-05-03 21:02:16

标签: c++ operator-overloading square-bracket

我不知道如何重载方括号运算符" []"它将输入和输出,这意味着我将能够:

_class ppp;
ppp[{1,2}] = 1;
char x = ppp[{1,2}] ;

我看到了this question并且它提供了以下代码:

unsigned long operator [](int i) const    {return registers[i];}
unsigned long & operator [](int i) {return registers[i];}

这对我不起作用:-(我试过并做了这个:

struct coord {
    int x;
    int y;
};

class _map
{
    public:
        struct coord c{3,4};
        char operator[](struct coord) const         // this is supposed to suppor output 
        {
            cout << "this1" << endl;
            return 'x';
        }
        char& operator[](struct coord)                  // this is supposed to support input 
        {
             cout << "this2" << endl;
             return c.x;
        }

        void operator= (char enter) 
        {
              cout << enter;
        }        

};

然后我做了主要的:

_map ppp;
ppp[{1,2}] = 1;
char x = ppp[{1,2}] ;

这给了我:

this2
this2

这意味着我无法制作两个差异函数,这些函数可以让我创建两个差异函数,例如:

ppp[{1,2}] = 1;
char x = ppp[{1,2}] ;

******************编辑前************************** < / p>

我试图将square运算符[]覆盖到输入和输出信息。而方括号的输入是结构。

我的灵感来自this question

struct coord {
    int x;
    int y;
};

class _map
{
    public:

        char operator[](struct coord) const         // this is supposed to suppor output 
        {
            cout << "this1" << endl;
            return 'x';
        }
        char& operator[](struct coord)                  // this is supposed to support input 
        {
             cout << "this2" << endl;
             char a = 'a';
             return a;
        }

        void operator= (char enter) 
        {
              cout << enter;
        }        

};

然后我做了主要的:

_map ppp;
ppp[{1,2}] = 1;
char x = ppp[{1,2}] ;

这给了我:

this2
this2

当将输入操作符的输入更改为int时,一切都很好:

char operator[](int coord) const         
        {
            cout << "this1" << endl;
            return 'x';
        }

然后我做了主要的:

_map ppp;
ppp[{1,2}] = 1;
char x = ppp[2] ;

然后我得到:

this2
this1

这是我的H.W.但我只是询问那些不是硬件主要部分的东西,我也在研究这个小东西......

1 个答案:

答案 0 :(得分:0)

答案完全归功于HolyBlackCat!

方括号(“[]”)的重写功能将返回如下引用:

char& operator[](coord c)
{
    return board[c.x][c.y];
}

因此我们可以为它分配一个char,因为它是对某个内存槽的引用,如下所示:

_map ppp;
ppp[{1,2}] = 1;

另一方面,我们将能够检索内部的内容,因为引用指向一些char,如下所示:

char x = ppp[{1,2}] ;

这意味着不需要像以前想象的那样使用两个重写函数。