Я не знаю, как перегрузить оператор квадратных скобок «[]», что он будет и вводить, и выводить, что означает, что я смогу:
_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, также я работаю над этой маленькой вещью некоторое время …
Ответ — все благодаря HolyBlackCat!
Функция переопределения квадратных скобок («[]») вернет ссылку следующим образом:
char& operator[](coord c)
{
return board[c.x][c.y];
}
Поэтому мы сможем назначить ему символ, поскольку он является ссылкой на некоторый слот памяти, следующим образом:
_map ppp;
ppp[{1,2}] = 1;
С другой стороны, мы сможем извлечь то, что находится внутри, так как ссылка указывает на некоторый символ следующим образом:
char x = ppp[{1,2}] ;
Это означает, что нет необходимости в двух основных функциях, как считалось ранее.
Других решений пока нет …