再写一个
时间: 2024-02-15 19:01:25 浏览: 19
好的,下面是另一个可能的程序实现:
```
#include <iostream>
#include <vector>
using namespace std;
class Sales {
public:
Sales(int n, int q, double p) : num(n), quantity(q), price(p) {}
static void setDiscount(double d) { discount = d; }
static void addSale(const Sales& s) {
sales.push_back(s);
}
static double average() {
double sum = 0.0;
int n = 0;
for (const auto& s : sales) {
n += s.quantity;
sum += s.quantity * s.price * discount;
}
return sum / n;
}
static void display() {
double sum = 0.0;
for (const auto& s : sales) {
sum += s.quantity * s.price * discount;
}
cout << "Total sales: " << sum << endl;
cout << "Average price: " << average() << endl;
}
private:
int num;
int quantity;
double price;
static double discount;
static vector<Sales> sales;
};
double Sales::discount = 1.0;
vector<Sales> Sales::sales;
int main() {
Sales::setDiscount(0.98);
Sales s1(101, 5, 23.5);
Sales::addSale(s1);
Sales s2(102, 12, 24.56);
Sales::addSale(s2);
Sales s3(103, 100, 21.5);
Sales::addSale(s3);
Sales::display();
return 0;
}
```
这个程序和上一个程序的功能相同,但是实现方式略有不同。我们仍然定义了一个 `Sales` 类,但是没有使用静态数据成员和静态成员函数。相反,我们将销售信息存储在了一个静态成员变量 `sales` 中,它是一个 `vector` 类型的容器,存储了多个 `Sales` 对象。在 `addSale` 函数中,我们通过调用 `push_back` 方法将传入的 `Sales` 对象加入到 `sales` 容器中。在 `average` 函数中,我们遍历 `sales` 容器,累加销售数量和销售金额,并返回平均售价。在 `display` 函数中,我们遍历 `sales` 容器,累加销售金额,并输出总销售额和平均售价,其中平均售价的计算调用了 `average` 函数。
需要注意的是,由于 `sales` 容器是一个静态成员变量,它的生命周期和程序的整个运行周期相同,因此我们不需要在 `average` 和 `display` 函数中传入任何参数,可以直接使用 `sales` 容器中的数据进行计算。此外,由于 `sales` 容器中存储的是 `Sales` 对象,因此在 `addSale` 函数中需要传入一个 `const Sales&` 类型的参数来表示要添加的销售信息。