c ++将子类添加到基类数组?

时间:2012-06-26 21:49:40

标签: c++ arrays subclass base-class

我有一本课本 和2个子类 lerningbook,readingbook 我正在尝试创建一个书籍列表 书* listofbooks 并添加子类

Book* listOfBooks;

void Mang::addBookToList(Book b3)
{
    Book* temp;
    temp=listOfBooks;
    lobsize++;
    listOfBooks=new Book[lobsize];
    int i;
    for(;i<lobsize;i++)
    {
        listOfBooks[i]=temp[i];
    }
    listOfBooks[i]=b3;
}

问题是当我试图向它发送它没有考虑它的子类 我试图使用模板,所以该功能将能够采取任何类,但它没有帮助
错误的原因是:
没有合适的用户定义从lerningbook到book exsists的转换
猜测我需要实现相同类型的功能,这将允许我这样做,但我不知道哪一个 希望你们中的一个可以帮我解决这个问题:)
(我知道我错过了关于临时数组的删除[]这种问题的问题)

1 个答案:

答案 0 :(得分:1)

b3Book,但listoOfBooksBook*的数组。您需要将Book*传递给addBookToList,不仅仅是为了分配而是为了避免object slicing

如果这不是学习练习,请改用std::vector<Book*>std::vector<std::shared_ptr<Book>>std::vector将根据需要动态增长,当delete被销毁时,使用智能指针会自动vector元素。

如果您选择使用Book*,请确保遵守What is The Rule of Three?。这可能只是通过声明复制构造函数和赋值运算符Mang使private不可复制。

请注意,i循环中for未初始化,而i == lobsize之后,for以下分配对数组的界限访问权限为listOfBooks[i]=b3;

lobsize - 1

数组索引从0开始,因此{{1}}是最后一个元素的索引。