Counter计数器只能在0-65535之间计数,请为它重载++、--、()操作,其中++和()操作用成员函数重载,--操作用友元函数重载。
时间: 2024-11-18 08:17:49 浏览: 18
Counter类如果设计成只支持0-65535之间的整数计数,我们需要确保溢出后能够循环回到0。以下是使用成员函数重载`++`和`()`操作符,以及友元函数重载`--`操作符的一个简单示例:
```cpp
#include <limits>
class Counter {
private:
unsigned short count;
static const std::size_t LIMIT = 65535;
public:
Counter(unsigned short initial_count = 0)
: count(initial_count % LIMIT) {}
// 成员函数重载:++
Counter& increment() {
if (++count >= LIMIT) {
count = 0; // 当计数值达到上限后,重置为0
}
return *this;
}
// 成员函数重载:()
unsigned short value() const {
return count;
}
// 友元函数重载:--
friend Counter decrement(Counter& counter) {
if (counter.decrement()) {
return counter;
} else {
return Counter(); // 当计数器到达最小值时返回一个新的空计数器
}
}
private:
bool decrement() {
if (--count <= 0) {
count = LIMIT - 1; // 计数值减至0,然后回环到最大值-1
}
return true; // 始终返回true,表示递减操作成功
}
};
int main() {
Counter c(1);
std::cout << "Incremented: " << c.increment().value() << std::endl;
std::cout << "Value after: " << c.value() << std::endl;
std::cout << "Decremented: " << decrement(c).value() << std::endl; // 输出新的计数器值
return 0;
}
```
在这个例子中,`increment()`用于增加计数,如果到达上限则从头开始。`value()`提供当前的计数值。`decrement()`作为友元函数,用于减少计数并返回新的计数器实例,当计数器降到0时,将返回一个新创建的计数器,代表计数器已经到了最低点。
请注意,这里的`decrement()`方法实际上不需要返回值,因为总是返回`true`表示操作成功。但在示例中为了演示,我选择返回一个新的计数器实例。在实际应用中,你可以根据需求调整这部分的设计。
阅读全文