我正在学习C ++。我遇到了一个相当有趣的问题,我希望将他们的食品托盘存放在客户类中。基本的想法是,一个顾客可以有一个由饮料和食物组成的托盘。
我最初的想法是使用以下课程。
class Customer
{
private:
std::string firstName;
std::string lastName;
int tablenumber;
//LinkList<Tray> myTray = new LinkList<Tray>();
//or
//LinkList<Tray> myTray;
public:
Customer();
Customer(std::string sFirstName, std::string sLastName,
int sTableNumber);
~Customer(void);
处理对象存储链接列表本身的正确方法是什么?那么在调用客户构造函数时,他们可以添加订单吗?
答案 0 :(得分:1)
听起来您希望您的客户能够将许多食品放在食品托盘中。因此,持有某种食品容器(不一定是链表)并使用Customer
类型方法添加或移除食品是有意义的。这个容器代表你正在谈论的托盘:
class Customer
{
private:
std::string firstName;
std::string lastName;
LinkList<FoodItem> myTray;
public:
AddFoodItemToTray(const FoodItem& item) { myTray.push(item);}
RemoveFoodItemFromTray(const FoodItem& item) { myTray.remove(item=; }
};
如果您希望从元素列表中初始化您的Customer
类,那么您只需添加一个构造函数:
explicit Customer(const LinkList<FoodItem>& tray) : myTray(tray) {}
最好不要将表格编号留给客户,让某些表格类别知道它所持有的客户。
答案 1 :(得分:0)
让我在详细介绍之前解决一个更基本的问题。
考虑LinkList<Tray> myTray = new LinkList<Tray>();
作为解决方案,不好。
以这种方式思考,每个客户都会拥有他们自己的托盘。因此,您需要为每位客户提供一个新托盘。
请记住,课程只是一个蓝图。
然后选择LinkList<Tray> myTray;
,然后在对象的构造函数中,每次创建客户时分配一个新托盘。
它看起来像是:
Customer()
{
//other construction
myTray = new LinkList<Tray>();
}
请注意,如果要动态分配列表,现在必须将其声明为LinkList<Tray> * myTray;
。
现在您可以根据自己的要求使用myTray
了。例如。您可以致电myTray.addToList(MyNewItem)
等。
假设:
当每个对象共享相同的值时,将它们声明为static
。但是你提到within a Customer class
他们的 food tray
所以我假设这不是这里的情况。
答案 2 :(得分:0)
编写另一个构造函数,它将托盘类型对象的链表作为参数。