我收到了构建tic-tac-脚趾板的任务,已经编写了主要功能,我们需要实现类,方法等。
仅允许使用3个字符:'X','O','。'
两行与我冲突:
1)board1 [{0,1}] ='x'; //这应该引发异常-“非法”
2)char c = board1 [{1,2}]; cout << c << endl; //打印:O
我重载了'[]'运算符。如果我从该方法返回一个对象-我将无法使第二行工作。如果我返回一个字符(由ref)-我将无法使第一行生效。
我还有什么其他可能性?我可以定义一个朋友函数来重载“ =”,该函数从左边接受char并从右边接受对象吗?
是否有可能使'='运算符重载,而左操作数为char?
是的,只要右操作数的类型是您自己的自定义类。
1)board1 [{0,1}] ='x'; //这应该引发异常-“非法”
2)char c = board1 [{1,2}]; cout << c << endl; //打印:O
在这两种情况下,都不会调用这种重载运算符,因此它对您没有用。
您可以做的是存储自定义类类型的对象数组,而不是裸char对象。
问题是缺乏信息。拿那里的东西,我知道你想要这个:
char c = board1[{1, 2}];
但不是这个:
board1[{0, 1}] = 'x';
您不需要为此超载operator=
。您只需要从const char
返回一个board::operator[]
。不能将const char
分配给它,但是可以将其分配给char
。