对象有自己的链表

时间:2012-12-01 16:49:09

标签: c++ object linked-list

我正在学习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);

处理对象存储链接列表本身的正确方法是什么?那么在调用客户构造函数时,他们可以添加订单吗?

3 个答案:

答案 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)

编写另一个构造函数,它将托盘类型对象的链表作为参数。