C++实验——Hotdog

本文介绍了一个基于面向对象编程的热狗定制系统,通过UML类图设计,实现了热狗及其配料的价格计算功能。系统涵盖了面包、肉类、蔬菜、酱料等食材的选择与总价计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的:

  1. 练习面向对象编程;
  2. 练习STL中vector容器的使用;
  3. 能够按照UML类图编写相应的程序;
  4. 练习继承、多态。

实验要求: 

                               

                 

  1. 根据客人需要定义hotdog,计算总共需要多少钱?

  2. 按照UML类图描述编写。 

实验材料:

  1. 食物材料: 

 

食物材料
​​​​

  2. UML图

UML类图

 

测试样例: 

int main() {

     Hotdog* hotdog = new Hotdog(new WheatBread());

     hotdog->addFood(new Beef());

     hotdog->addFood(new Cheese());

     hotdog->addFood(new Mustard());

     hotdog->addFood(new Onion());

     hotdog->addFood(new Onion());

     hotdog->addFood(new Tomato());

     hotdog->printDetails();

}

代码实现: 

#include <iostream>
#include <vector>

using namespace std;


//食物材料
class FoodIngredients
{
public:
    int price;
public:
    FoodIngredients()
    {
        this->price = 0;
    }
    virtual int getPrice() = 0;
    virtual void printDetails() = 0;
};
//面包类
class Bread : public FoodIngredients
{
public:
    Bread()
    {
        this->price = 6;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "普通面包:" << this->price << endl;
    }
};

class Hotdog
{
public:
    Hotdog(Bread* bread)
    {
        this->mBread = bread;
        v_hotdog.push_back(mBread);
    }
    void getTotalPrice()
    {
        int total = 0;
        vector<FoodIngredients*>::iterator it = v_hotdog.begin();
        for(;it != v_hotdog.end(); it++)
        {
            total = total + (*it)->price;
        }
        cout << "热狗总价格:" << total << endl;
    }
    void printDetails()
    {
        vector<FoodIngredients*>::iterator it = v_hotdog.begin();
        for(;it != v_hotdog.end(); it++)
        {
            (*it)->printDetails();
        }
    }
    bool addFood(FoodIngredients* foodingredients)
    {
        v_hotdog.push_back(foodingredients);
        return true;
    }
    bool setBread(Bread* bread)
    {
        this->mBread = bread;
        return true;
    }
private:
    vector<FoodIngredients*> v_hotdog;
    Bread* mBread;
};

//全麦面包
class Wheat_bread : public Bread
{
public:
    Wheat_bread()
    {
        this->price = 7;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "全麦面包:" << this->price << endl;
    }
};
//蜂蜜全麦面包
class Honey_bread : public Bread
{
public:
    Honey_bread()
    {
        this->price = 8;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "蜂蜜全麦面包:" << this->price << endl;
    }
};
//肉类
//培根
class Bacon : public FoodIngredients
{
public:
    Bacon()
    {
        this->price = 8;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "培根:" << this->price << endl;
    }
};
//牛肉
class Beef : public FoodIngredients
{
public:
    Beef()
    {
        this->price = 12;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "牛肉:" << this->price << endl;
    }
};
//鸡肉
class Chicken : public FoodIngredients
{
public:
    Chicken()
    {
        this->price = 7;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "鸡肉:" << this->price << endl;
    }
};
//肉丸
class Kofta : public FoodIngredients
{
public:
    Kofta()
    {
        this->price = 10;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "肉丸:" << this->price << endl;
    }
};
//蔬菜类
//西红柿
class Tomato : public FoodIngredients
{
public:
    Tomato()
    {
        this->price = 2;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "西红柿:" << this->price << endl;
    }
};
//生菜
class Lettuce : public FoodIngredients
{
    Lettuce()
    {
        this->price = 1;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "生菜:" << this->price << endl;
    }
};
//洋葱
class Onion : public FoodIngredients
{
public:
    Onion()
    {
        this->price = 1;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "洋葱:" << this->price << endl;
    }
};
//酸黄瓜
class Sourcucumber : public FoodIngredients
{
public:
    Sourcucumber()
    {
        this->price = 1;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "酸黄瓜:" << this->price << endl;
    }
};
//黄瓜
class Cucumber : public FoodIngredients
{
public:
    Cucumber()
    {
        this->price = 1;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "黄瓜:" << this->price << endl;
    }
};
//紫甘蓝
class Puplecabbage : public FoodIngredients
{
public:
    Puplecabbage()
    {
        this->price = 1;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "紫甘蓝:" << this->price << endl;
    }
};

//酱料类
//西红柿酱
class Tomatosauce : public FoodIngredients
{
public:
    Tomatosauce()
    {
        this->price = 1;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "西红柿酱:" << this->price << endl;
    }
};
//芥末酱
class Mustard : public FoodIngredients
{
public:
    Mustard()
    {
        this->price = 1;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "芥末酱:" << this->price << endl;
    }
};
//蛋黄酱
class Mayonnaise : public FoodIngredients
{
public:
    Mayonnaise()
    {
        this->price = 2;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "蛋黄酱:" << this->price << endl;
    }

};
//辣酱
class Chilisaurce : public FoodIngredients
{
public:
    Chilisaurce()
    {
        this->price = 1;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "辣酱:" << this->price << endl;
    }
};
//起司
class Cheese : public FoodIngredients
{
public:
    Cheese()
    {
        this->price = 2;
    }
    virtual int getPrice()
    {
        return this->price;
    }
    virtual void printDetails()
    {
        cout << "起司:" << this->price << endl;
    }
};

int main()
{
    Hotdog* hotdog = new Hotdog(new Bread());
    hotdog->addFood(new Beef());
    hotdog->addFood(new Cheese());
    hotdog->addFood(new Mustard());
    hotdog->addFood(new Onion());
    hotdog->addFood(new Onion());
    hotdog->addFood(new Tomato());
    hotdog->addFood(new Cucumber());

    hotdog->printDetails();
    hotdog->getTotalPrice();

    delete hotdog;
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值