C++作业 实验8虚函数与多态

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;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值