【问题标题】:c++ adding subclass to array of base class?c ++将子类添加到基类数组中?
【发布时间】:2012-06-28 07:25:08
【问题描述】:

我有一本课本 和 2 个子类 学习本,阅读本 我正在尝试创建书籍清单 书籍* 书籍清单 并添加子类

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 的合适的用户定义转换
猜测我需要实现相同类型的功能,这将允许我这样做,但我不知道哪一个 希望你们中的一个可以帮助我,谢谢 :)
(我知道我错过了临时数组上的 delete[] 有点卡在这个问题上)

【问题讨论】:

    标签: c++ arrays subclass base-class


    【解决方案1】:

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

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

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

    请注意,ifor 循环中未初始化,并且在for 之后的i == lobsize 数组上的以下赋值超出范围访问:

    listOfBooks[i]=b3;
    

    数组索引从 0 开始,所以lobsize - 1 是最后一个元素的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多