对象实例可以在c ++中返回其自己的值吗?

时间:2019-03-03 14:11:58

标签: c++ overloading this instance operator-keyword

所以我将int的变体定义为旋转整数类,这很简单,但是我希望能够做类似的事情

cout << x << '\n';

而不是:

cout << x.value() << '\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; }

};

“ ^ rotating_array”与析构函数〜rotating_array的定义非常相似。

似乎应该是面向对象设计的基础。

2 个答案:

答案 0 :(得分:4)

您应该使用 运算符重载

在班上:

friend ostream& operator<<(ostream& os, const RotatingInt& x)
{
    os << x.value;
    return os;
}

RotatingInt更改为您的班级名称。

下面是一个示例:http://cpp.sh/9turd

答案 1 :(得分:1)

要做到这一点,C ++有一些非常有用的东西,但是要真正理解它需要花费一些精力。正如Borgleader指出的那样:您想重载<<操作符。

在旋转整数类中,您需要告诉编译器operator <<(这是调用函数的方式,当编译器看到任何对象的<<操作符时,编译器将调用该函数)可以访问该类的私有成员。这是通过使函数成为旋转整数类的朋友函数来完成的。在课程中,您添加:

friend std::ostream& operator<<(std::ostream&, const RotatingInteger&)

operator <<函数的实现可能看起来像这样:

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";
}