如何使“ =”的重载在“ =”的另一端起作用

时间:2019-12-10 18:56:39

标签: c++ c++11 c++14

作为我的家庭作业,我制作了这个小c ++程序。我不允许更改主体。 我设法做到

yield

但是现在我做不到

board1[{1, 1}] = 'X';

我知道它不起作用,因为c是char类型,并且我正在向其中返回“ CellValue”。但是我不明白如何使'='以另一种方式工作并使它以char形式返回值当我希望它位于'='的右侧时。 整个代码:

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

我刚刚开始用C ++编程,所以现在允许我使用一些太聪明的东西。我想从你这里得到一些帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

如果类的实例是作业的右侧,而左侧的类型不是同一类型,则必须提供用户定义的转换才能使它起作用。

有两种方法可以进行分配。第一个是左侧对象可以提供一个赋值运算符或转换构造函数,该赋值运算符或转换构造函数采用右侧类型的对象。这是您对CellValue::operator=()所做的事情,但是在LHS为char时无法使用,因为您无法修改内置类型。

第二种方式是,右边的对象为左边的类型(或可以分配给它的其他东西)提供了一个转换运算符。这可以通过将operator char()添加到您的CellValue类中来完成:

class CellValue{
public:
  operator char() const{
    return value;
  }
// rest as before
};

这可以是const成员函数,因为它仅读取数据。