Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对象实例是否可以在c+;中返回自己的值+;?_C++_Overloading_This_Instance_Operator Keyword - Fatal编程技术网

C++ 对象实例是否可以在c+;中返回自己的值+;?

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) {

因此,我将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";
}