所以我将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的定义非常相似。
似乎应该是面向对象设计的基础。
答案 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";
}