转换运算符和运算符>>

时间:2012-02-25 13:14:37

标签: c++

我有一个程序:

class INT {
public:
  INT(int ii = 0) : i(ii) {}
  operator int() { return i; }
private:
  int i;
};

int main()
{
  INT i;
  cin >> i;
}

语句cin >> i编译错误,但我不知道原因?

在我的选项中,编译器可以找到该语句的函数cin.operator>>(int&),因为INT可以通过int转换为INT::operator int()

3 个答案:

答案 0 :(得分:3)

您可以通过更改int运算符使其返回引用来执行您要执行的操作:

operator int&() { return i; }

目前您正在返回整数的副本,所以即使>>操作员确实工作了它不会改变原始值。

答案 1 :(得分:2)

operator int()返回一个临时的,它不能绑定到operator>>期望的引用到非const(因为它需要更改该变量)。

将其更改为operator int&(),并将const重载添加为operator int const&() const

答案 2 :(得分:0)

我的建议是重载<<和>>作为朋友,以便它可以通过引用传入私有变量。

class INT {
public:
  INT(int i = 0) : _i(i) {}
  const int& getValue()const {return _i;}
  void setValue(int i){_i=i;}
  friend istream& operator>>(istream& in, INT& myINT);

private:
  int _i;
};

friend istream& operator>>(istream& in, INT& myINT){
   int x;
   in >> x;
   myINT.setValue(x);
   return in;
}