【问题标题】:Can i get something from a list with multiple objects of a class?我可以从一个包含多个类对象的列表中得到一些东西吗?
【发布时间】:2013-03-19 17:00:55
【问题描述】:

我有:

class Library
{
private:
list<Publication> L;
}
class Publication
{
protected:
string title;
string editor;
}

class Book:public Publication
{
private:
vector<string> Author;
}

当我在我的列表中插入一本书时,我失去了作者?如果不是,当我想显示列表中的一个出版物时,我还想显示该出版物的作者。如何在不修改列表结构的情况下做到这一点?

【问题讨论】:

    标签: c++ list class


    【解决方案1】:

    如果不更改L 的类型,您将无法做到这一点。这是list&lt;Publication&gt; - 它存储Publications,而不是Books。如果您将Book 推入其中,它将被切片,只留下Publication 部分。

    如果您想以多态方式存储Publications,则需要使用指针或引用。我建议使用以下方法之一:

    // When the Library has sole-ownership of a dynamically allocated Publication:
    std::list<std::unique_ptr<Publication>> L;
    // When the Library has shared-ownership of a dynamically allocated Publication:
    std::list<std::shared_ptr<Publication>> L;
    // When the Library wants a reference to a Publication:
    std::list<std::reference_wrapper<Publication>> L;
    

    如果由于任何原因您不能使用其中任何一个,您当然可以将原始指针存储在 L

    【讨论】:

      【解决方案2】:

      您正在存储Publication 对象,因此当您尝试存储Books 时,您会得到object slicing。解决方案是将smart pointers 存储到Publications。例如,

      #include <memory>
      class Library
      {
      private:
        std::list<std::unique_ptr<Publication>> L;
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-14
        • 2011-09-24
        • 1970-01-01
        相关资源
        最近更新 更多