1
题目描述
小明经营着一个不大的水果店(似曾相识哦~),只销售苹果、香蕉和桔子。为了促销,小明制定了如下定价策略:
1. 苹果:按斤论价,每斤P元,买W斤,则需支付W*P元。
2. 香蕉:半价,每斤P元,买W斤,则需支付W/2*P元。
3.桔子:按斤论价,每斤P元,买W斤。如果W>10,则打半价,即需支付W*P/2元;否则如果W>5,则打八折,即需支付W*P*0.8元;其他情况不打折,即需支付W*P元。
请用C++来计算某个顾客采购的水果的总价。该程序至少应有:
1. Fruit类:是个抽象类,是Apple、Banana和Orange的父类。支持重载的加法运算。
2. Apple、Banana和Orange类:分别对应于苹果、香蕉和桔子三种水果,每种水果执行不同的定价策略。
源代码
#include <iostream>
#include <iomanip>
using namespace std;
class Fruit
{
public:
virtual double Sum()=0;//纯虚函数
Fruit(int W ,int P)
{
this->W = W;
this->P = P;
}
protected:
double P;
double W;
};
class Apple:public Fruit
{
public:
Apple(double w,double p):Fruit(w,p)
{
}
double Sum()
{ double sum ;
sum= W*P;
return sum;
}
};
class Banana:public Fruit
{
public:
Banana(double w,double p):Fruit(w,p)
{
}
double Sum()
{
double sum;
sum = W*P*0.5;
return sum;
}
};
class Orange:public Fruit
{
public:
Orange(double w, double p):Fruit(w, p)
{
}
double Sum()
{ double sum ;
if(W>10)
sum = W*P*0.5;
else if(W>5)
sum = W*P*0.8;
else
sum = W*P;
return sum;
}
};
int main()
{
double W,P;
double sum = 0;
char C;
int n = 3;
while(n>0)
{
if(C == 'q')
break;
cin >> C >> W >> P;
if(C == 'a')
{
Apple x(W,P);
sum+= x.Sum();
}
else if(C == 'b')
{
Banana y(W,P);
sum += y.Sum();
}
else if(C == 'o')
{
Orange z(W,P);
sum += z.Sum();
}
n--;
}
//cout << setiosflags(ios::fixed) << setprecision(2) << sum << endl;
cout << sum << endl;
return 0;
}
2
题目描述
运用多态编写程序,声明抽象基类Shape,由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea()分别输出以上三者的面积(结果保留两位小数),3个图形的数据在定义对象时给定。
源代码
#include <iostream>
#include <iomanip>
using namespace std;
class Shape
{
public:
virtual double printArea() = 0;
};
class Circle
{
private:
double r;
public:
Circle(double R):r(R)
{
}
double printArea()
{
return r*r*3.1415926;
}
};
class Rectangle
{
private:
double a, b;
public:
Rectangle(double A,double B):a(A),b(B)
{
}
double printArea()
{
return a*b;
}
};
class Triangle
{
private:
double h,l;
public:
Triangle(double H,double L):h(H),l(L)
{
}
double printArea()
{
return h*l*0.5;
}
};
int main()
{
double R,A,B,H,L;
cin >> R >> A >> B >> H >> L;
Circle x(R);
Rectangle y(A,B);
Triangle z(H,L);
cout << setiosflags(ios::fixed) << setprecision(2) ;
cout << "area of circle=" << x.printArea() << endl;
cout << "area of rectangle=" << y.printArea() << endl;
cout << "area of triangle=" << z.printArea() << endl;
return 0;
}