как вводить и выводить оператор квадратной скобки []

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

_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, также я работаю над этой маленькой вещью некоторое время …

0

Решение

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

Функция переопределения квадратных скобок («[]») вернет ссылку следующим образом:

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

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

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]