как вводить и выводить оператор квадратной скобки [] - PullRequest
0 голосов
/ 04 мая 2018

Я не знаю, как перегрузить оператор квадратных скобок «[]», так как он будет вводить и выводить, что означает, что я смогу:

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

Я видел этот вопрос , и он дал этот код:

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

****************** ПЕРЕД РЕДАКТИРОВАНИЕМ **************************

Я пытаюсь переопределить квадратный оператор [] для ввода и вывода информации. в то время как ввод в квадратные скобки является структурой.

Я пробовал это на основе этого вопроса :

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. но я просто спрашиваю о вещах, которые не являются основной частью HW, также я работаю над этой маленькой вещью некоторое время ...

1 Ответ

0 голосов
/ 06 мая 2018

Ответ - все благодаря HolyBlackCat!

Функция переопределения квадратных скобок ("[]") вернет ссылку, подобную этой:

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

Поэтому мы сможем присвоить ему символ, так как он является ссылкой на некоторый слот памяти, следующим образом:

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

С другой стороны, мы сможем извлечь то, что находится внутри, так как ссылка указывает на некоторый символ следующим образом:

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

Это означает, что нет необходимости в двух основных функциях, как считалось ранее.

...