C++ 对象链表

Posted

技术标签:

【中文标题】C++ 对象链表【英文标题】:C++ Linked List of Objects 【发布时间】:2017-05-06 02:11:52 【问题描述】:

我有一个类,它的对象必须添加到链表中。对象仅在非成员函数中创建。我不得不承认,链接列表对我来说毫无意义,是的,我已经阅读了这个论坛上的其他问题,但仍然无法弄清楚。

我将如何进行 1. 创建这个链表 2. 每次创建一个对象时都向这个列表添加一个对象 3. 能够删除列表中的每个节点?

这是我的课:

class ShirtOrder

    friend ostream& operator<<(ostream &os, const ShirtOrder &rhsObj);

private:
    // the data members below are required (you may change identifiers)
    // there is no need for additional data members
    int orderYear, orderMonth, orderDay;
    char printMethod; // 's', 'i', or 'e'
    string message;
    int mediums; // number of medium shirts ordered
    int larges; // number of large shirts ordered
    int xls; // number of XL shirts ordered
    string shirtColor;
    string inkColor;
    string orderID;
    string region;
    string nameAndEmail;

    ShirtOrder* next; // new for P5

public:
    ShirtOrder(); // default constructor

    ShirtOrder(int orderYear, int orderMonth, int orderDay,
               char printMethod, string message, int mediums, int larges, int xls,
               string shirtColor, string inkColor, string orderID,
               string region, string nameAndEmail,
               ShirtOrder *soPtr = NULL);

    ShirtOrder(const ShirtOrder &otherObj);

    ~ShirtOrder(); // destructor                      // New for P5 (may not be in-line)

    ShirtOrder* getNext() const return next;        // New for P5 (may be in-line)

    void setNext(ShirtOrder* soPtr) next = soPtr;   // New for P5 (may be in-line)

    double getBlankCost() const;
    double getPrintingCost() const;
    double getTotalCost() const;

    int    getLetterCount() const;
    char   getPrintMethod() const return printMethod;
    int    getOrderYear() const return orderYear;
    int    getOrderMonth() const return orderMonth;
    int    getOrderDay() const return orderDay;
    int    getMediums() const return mediums;
    int    getLarges() const return larges;
    int    getXls() constreturn xls;

    string getShirtColor() const return shirtColor;
    string getInkColor() const return inkColor;
    string getOrderID() const return orderID;
    string getRegion() const return region;
    string getNameAndEmail() const return nameAndEmail;
    string getMessage() const return message;

    void  setOrderYear (int orderYear) this->orderYear = orderYear;
    void  setOrderMonth (int orderMonth) this->orderMonth = orderMonth;
    void  setOrderDay (int orderDay) this->orderDay = orderDay;
    void  setPrintMethod (char printMethod) this->printMethod = printMethod;
    void  setMessage (string message) this->message = message; 
    void  setMediums (int mediums) this->mediums = mediums;
    void  setLarges (int larges) this->larges = larges;
    void  setXls (int xls) this->xls = xls;
    void  setShirtColor (string shirtColor) this->shirtColor = shirtColor;
    void  setInkColor (string inkColor) this->inkColor = inkColor;
    void  setOrderID (string orderID) this->orderID = orderID;
    void  setRegion (string region) this->region = region;
    void  setNameAndEmail (string nameAndEmail) this->nameAndEmail = nameAndEmail;

;

所以说这个类的一个对象是在一个非成员函数中创建的。如何创建此类对象的列表,并将每个对象添加到列表的末尾?谢谢!

【问题讨论】:

如何创建此类对象的列表 -- std::list&lt;ShirtOrder&gt; -- 将每个对象添加到列表的末尾 -- @ 987654323@ 我需要它是一个链表,特别是。虽然我感谢你的回答! std::list 是一个链表。如果这应该是某种自制的链表,为什么要通过创建ShirtOrder 类来混淆?首先创建一个通用链表类,对其进行测试,然后在您的ShirtOrder 类中使用它。 非会员builder函数的签名是要给我们看,还是我们自己补? 为了清除我的评论,我需要列表中的每个节点都可以被前一个节点的“下一个”指针访问... 【参考方案1】:

在你的私人领域创建一个std::lib&lt;dataType&gt; mylist;

然后你只需插入你想要的项目。 mylist.insert(whateverItem);

这有帮助吗?

【讨论】:

对了,我推荐Qt。它拥有令人惊叹的库,让这种方式变得更容易。

以上是关于C++ 对象链表的主要内容,如果未能解决你的问题,请参考以下文章

C++封装链式表-链表

从 O(1) 中的链表中删除任何元素 - Java vs C++

C++中用new开辟一个对象后怎么给其私有数据成员赋值

动态创建对象 C++

c++意外静态链表

删除链表 C++ 中的特定节点