C ++:是否可能以左操作数为char的方式重载'='运算符? [重复]

问题描述 投票:0回答:1

我收到了构建tic-tac-脚趾板的任务,已经编写了主要功能,我们需要实现类,方法等。

仅允许使用3个字符:'X','O','。'

两行与我冲突:

1)board1 [{0,1}] ='x'; //这应该引发异常-“非法”

2)char c = board1 [{1,2}]; cout << c << endl; //打印:O

我重载了'[]'运算符。如果我从该方法返回一个对象-我将无法使第二行工作。如果我返回一个字符(由ref)-我将无法使第一行生效。

我还有什么其他可能性?我可以定义一个朋友函数来重载“ =”,该函数从左边接受char并从右边接受对象吗?

c++ methods overloading operator-keyword friend
1个回答
0
投票

是否有可能使'='运算符重载,而左操作数为char?

是的,只要右操作数的类型是您自己的自定义类。

1)board1 [{0,1}] ='x'; //这应该引发异常-“非法”

2)char c = board1 [{1,2}]; cout << c << endl; //打印:O

在这两种情况下,都不会调用这种重载运算符,因此它对您没有用。

您可以做的是存储自定义类类型的对象数组,而不是裸char对象。


0
投票

问题是缺乏信息。拿那里的东西,我知道你想要这个:

char c = board1[{1, 2}];

但不是这个:

board1[{0, 1}] = 'x';

您不需要为此超载operator=。您只需要从const char返回一个board::operator[]。不能将const char分配给它,但是可以将其分配给char

© www.soinside.com 2019 - 2024. All rights reserved.