【发布时间】:2022-06-10 23:27:58
【问题描述】:
我编写了这段代码来使用类计算平均值。
#include <iostream>
#include <cstdint>
class Average
{
private:
int32_t m_total;
int8_t m_numbers;
public:
Average()
{
}
Average operator+= (int value);
friend std::ostream& operator<<(std::ostream& out, const Average& average)
{
out << static_cast<double>(average.m_total / average.m_numbers);
return out;
}
};
Average Average::operator+= (int value)
{
m_total += value;
++m_numbers;
return *this;
}
int main()
{
Average avg; avg += 5;
std::cout << avg << '\n';
avg += 9; std::cout << avg << '\n';
avg += 19; std::cout << avg << '\n';
avg += -9; std::cout << avg << '\n';
(avg += 7) += 11;
std::cout << avg << '\n';
Average copy = avg; std::cout << copy << '\n';
return 0;
结果是
1.6843e+07
1.71799e+07
1.75305e+07
1.78957e+07
1.82765e+07
1.82765e+07
这不是我想要的。 设置值改变了情况。
private:
int32_t m_total = 0;
int8_t m_numbers = 0;
但我不明白为什么。是否有一些规则必须设置值才能工作?
【问题讨论】:
-
“是否有一些规则必须设置值才能工作?” - 是的。是的,有
标签: c++