实验目的:
- 练习面向对象编程;
- 练习STL中vector容器的使用;
- 能够按照UML类图编写相应的程序;
- 练习继承、多态。
实验要求:
-
根据客人需要定义hotdog,计算总共需要多少钱?
-
按照UML类图描述编写。
实验材料:
- 食物材料:

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