水果店
小明经营着一个不大的水果店(似曾相识哦~),只销售苹果、香蕉和桔子。为了促销,小明制定了如下定价策略:
- 苹果:按斤论价,每斤P元,买W斤,则需支付W*P元。
- 香蕉:半价,每斤P元,买W斤,则需支付W/2*P元。
- 桔子:按斤论价,每斤P元,买W斤。如果W>10,则打半价,即需支付W*P/2元; 否则如果W>5,则打八折,即需支付W*P*0.8元;其他情况不打折,即需支付W*P元。
请用C++来计算某个顾客采购的水果的总价。该程序至少应有: - Fruit类:是个抽象类,是Apple、Banana和Orange的父类。支持重载的加法运算。
- Apple、Banana和Orange类:分别对应于苹果、香蕉和桔子三种水果,每种水果执行不同的定价策略。
输入为多行,每行格式为:
C W P
其中C是水果类型(a、b、o分别代表苹果、香蕉和桔子),W和P分别是顾客购买的相应水果的重量和每斤水果的单价。输入完成后输入字符q结束输入。
输出顾客需支付的总金额。
输入
a 1 1
b 1 1
o 1 1
q
输出
2.5
//水果店
#include<iostream>
using namespace std;
class Fruit
{
public:
double w,p;
virtual double price(void)=0;
// friend double operator+();
};
class Apple: public Fruit
{
public:
Apple()
{
cin>>w>>p;
}
double price()
{
return p*w;
}
};
class Banana: public Fruit
{
public:
Banana()
{
cin>>w>>p;
}
double price()
{
return p*w*0.5;
}
};
class Orange: public Fruit
{
public:
Orange()
{
cin>>w>>p;
}
double price()
{
if(w>10)
{
return p*w*0.5;
}
if (w>5)
return p*w*0.8;
else
return p*w;
}
};
int main(void)
{
char name;
double total=0,weight,price;
while ((cin>>name&&name!='q'))
{
switch(name)
{
case 'a':
{
Apple a;
total+=a.price();
break;
}
case 'b':
{
Banana b;
total+=b.price();
break;
}
case 'o':
{
Orange o;
total+=o.price();
break;
}
default:
break;
}
}
cout<<total<<endl;
return 0;
}