我有一个程序:
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()
。
答案 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;
}