任务描述 在一个货运系统中,必须保存每件货物的重量信息以及所有货物的总重量及货物个数。设计Goods类实现上述功能。 货物个数/货物总重量是指:某一时刻所有可用的货物(即生命周期仍然有效的)的货物个数/货物的总重量。 测试用例将通过Goods的静态成员函数获取货物个数/货物总重量。 类描述 私有成员变量weight:一个浮点类型小数,表示货物的重量。 私有成员变量total:一个整型数,表示货物的个数。 私有成员变量total_weight:一个浮点类型小数,表示所有货物的总重量。 构造函数Goods:接受一个浮点数表示重量,构造一个对应重量的货物对象。 析构函数~Goods:销毁一个货物对象。 公有函数getWeight:返回当前对象的货物重量。 公有函数getTotalWeight:返回货物总重量。 公有函数getTotal:返回货物个数。 测试用例保证货物重量为(0, 1000)内、小数点后不超过3位的小数;货物总数不超过20。 特别提示 静态成员及静态成员函数请参考10.6节内容。 请参考课本10.5.3节,将必要的成员函数设置为 const 成员函数。参考下面的测试用例,理解这样做的原因。
时间: 2024-02-06 20:09:32 浏览: 50
以下是Goods类的实现代码:
```cpp
#include <iostream>
class Goods {
private:
float weight;
static int total;
static float total_weight;
public:
Goods(float w) : weight(w) {
total++;
total_weight += w;
}
~Goods() {
total--;
total_weight -= weight;
}
float getWeight() const {
return weight;
}
static float getTotalWeight() {
return total_weight;
}
static int getTotal() {
return total;
}
};
int Goods::total = 0;
float Goods::total_weight = 0.0f;
int main() {
Goods g1(50.0f);
std::cout << "Total weight: " << Goods::getTotalWeight() << std::endl; // should output 50
std::cout << "Total goods: " << Goods::getTotal() << std::endl; // should output 1
Goods g2(30.0f);
std::cout << "Total weight: " << Goods::getTotalWeight() << std::endl; // should output 80
std::cout << "Total goods: " << Goods::getTotal() << std::endl; // should output 2
return 0;
}
```
在这个实现中,我们使用了静态成员变量和静态成员函数来保存所有物品的总重量和物品个数。在Goods的构造函数中,我们将新建的物品的重量加到总重量中,并且让总物品个数加1。在Goods的析构函数中,我们从总重量中减去被销毁的物品的重量,并且让总物品个数减1。
注意,在getWeight()函数中,我们将其设置为const成员函数,因为它不会修改任何类成员变量。同样地,在getTotalWeight()和getTotal()函数中,我们也将它们设置为静态成员函数,因为它们只需要访问静态成员变量。
阅读全文