CPP学习之——静态成员的使用(17.4)

一 概述

某大型批发药店成箱采购阿司匹林,又成箱卖出,购进与卖出时均以价格为单位,每箱的价格都不一样,请设计一个程序来盘点现有库存中阿司匹林的总价格以及它的卖出和购进情况.

二 分析过程

  • 第一、我们将阿司匹林声明为一个aspl类,那么每箱阿司匹林就是该类的一个对象
  • 第二、由于每箱阿司匹林都有价格,因此必须得有个成员变量来表示价格,这里在aspl这个类中声明一个私有成员变量price
  • 第三、由于阿司匹林的总价格是属于这个类的总价格,而不是某一箱阿司匹林的价格。所以我们要将总价格声明为静态成员变量,这里声明为TotalPrice.
  • 第四、购进一箱阿司匹林我们可以看作是创建一个对象,我们可以用new来创建该对象,同时在构造函数中实例化该对象的私有成员变量price。这样就得到了一箱阿司匹林并且有了它的初始价格
  • 第五、同理、卖出一箱阿司匹林我们可以看作是删除一个对象,我们用delete来删除该对象,同时在析构函数中将总价格减去该箱的价格。这样账面上就少了一箱阿司匹林,并且总价格也减去了该箱的价格

三 示例演示及结果输出

3.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<iostream>
using namespace std;
class aspl
{
private:
float price;
static float TotalPrice;
public:
aspl(float p){price=p;TotalPrice=p+TotalPrice;}
~aspl(){TotalPrice=TotalPrice-price;}
static float get(){return TotalPrice;}
};
float aspl::TotalPrice=0;
int main()
{
float f;
cout<<"阿司匹林的库存总价格为:";
cout<<aspl::get()<<endl;
int i=0;
cout<<"请输入第"<<i<<"次购进的阿司匹林的单箱价格:";
cin>>f;
aspl *p[5];
p[i]=new aspl(f);
cout<<"阿司匹林的库存总价格为:";
cout<<aspl::get()<<endl;
i++;
cout<<"请输入第"<<i<<"次购进的阿司匹林的单箱价格:";
cin>>f;
p[i]=new aspl(f);
cout<<"阿司匹林的库存总价格为:";
cout<<aspl::get()<<endl;
cout<<"请输入卖出的阿司匹林的编号,编号即第几次购进:";
cin>>i;
delete p[i];
cout<<"阿司匹林的库存总价格为:";
cout<<aspl::get()<<endl;
return 0;
}

3.2 输出结果

1
2
3
4
5
6
7
阿司匹林的库存总价格为:0
请输入第0次购进的阿司匹林的单箱价格:12.5
阿司匹林的库存总价格为:12.5
请输入第1次购进的阿司匹林的单箱价格:22
阿司匹林的库存总价格为:34.5
请输入卖出的阿司匹林的编号,编号即第几次购进:0
阿司匹林的库存总价格为:22