C++ 对象实例是否可以在c+;中返回自己的值+;?
因此,我将int上的一个变量定义为一个旋转整数类,这非常简单,但我希望能够像C++ 对象实例是否可以在c+;中返回自己的值+;?,c++,overloading,this,instance,operator-keyword,C++,Overloading,This,Instance,Operator Keyword,因此,我将int上的一个变量定义为一个旋转整数类,这非常简单,但我希望能够像 cout << x << '\n'; class rotating_int { private: int _value, _low, _high; public: int operator++(int) { if (++_value > _high) _value = _low; return _value; } int operator--(int) {
cout << x << '\n';
class rotating_int
{
private:
int _value, _low, _high;
public:
int operator++(int) { if (++_value > _high) _value = _low; return _value; }
int operator--(int) { if (--_value < _low) _value = _high; return _value; }
int operator++() { if (++_value > _high) _value = _low; return _value; }
int operator--() { if (--_value < _low) _value = _high; return _value; }
void operator=(int value) { _value = value; }
int operator==(int value) { return _value == value; }
int val() { return _value; }
rotating_int(int value, int low, int high) { _value = value; _low = low; _high = high; }
int ^rotating_array() { return &_value; }
};
cout您应该使用操作符重载
在课堂上:
friend ostream& operator<<(ostream& os, const RotatingInt& x)
{
os << x.value;
return os;
}
C++代码有一些非常有用的东西,但是需要花费一些努力才能真正理解它。正如Borgeader所指出的:您想重载您是否尝试过重载操作符是的。查找运算符重载。我正在使用运算符重载,但我只希望使用实例x返回x.value(),这样我就不必重载所有可能的运算符来访问私有成员“\u value”。然后我要重载的就是++,而且——我找不到任何关于你所问问题的参考,对不起。我认为这是不可能的。不,这似乎是不可能的。我刚刚编写了20多个运算符重载,所有这些重载都可以用类似“int&^rotating\u array(){return\u value;}”的方法来解决,就像定义构造函数或析构函数一样。真烦人!非常感谢你的帮助。这两种方法都很好地解决了这个问题。这并不是我想要的,我也知道操作符重载,但是像这样的流链接肯定是有用的信息。非常感谢。您可以将实例变量公开,但这违反了OOP的规则。另一个选项是通过如下方式创建成员函数来返回实例变量的引用:int&getValue(){return\u value;}
,然后您可以编写x.getValue()++
,它会将\u值
增加1。但是您必须始终调用getValue函数。如果您不想这样做,恐怕您必须重载所有必需的运算符。谢谢,这是我令人沮丧的答案-最好有类似“int&rotating_array(){return&_value;}”的东西。哦,谢谢你的帮助。确切地知道是件好事。
friend ostream& operator<<(ostream& os, const RotatingInt& x)
{
os << x.value;
return os;
}
friend std::ostream& operator<<(std::ostream&, const RotatingInteger&)
std::ostream& operator<<(std::ostream& os, const RotatingInteger& i) {
os << i.value;
return os; // you need to return the stream in order to add something
// else after you pass the RotatigInteger-object like in your
// example: cout << x << "\n";
}