我不知道如何重载方括号运算符" []"它将输入和输出,这意味着我将能够:
_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.但我只是询问那些不是硬件主要部分的东西,我也在研究这个小东西......
答案 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}] ;
这意味着不需要像以前想象的那样使用两个重写函数。