2012-06-26 20 views
1

我有一類書 和2子 lerningbook,readingbook ,我想,當我試圖建立的書籍 書清單* listofbooks 並添加到它的子類c + +將子類添加到基類數組?

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; 
} 

問題發送它這個不是accpecting它 子類我tryed使用模板,這樣的功能將能夠採取任何類,但它並沒有幫助
錯誤上午葛亭是:從lerning
沒有合適的用戶定義的轉換書exsists
猜測我需要實現相同類型的功能,這將允許我做到這一點,但我不知道這一個 希望你們中的一個人可以幫助我在thx中的副詞:)
(我知道我是缺少臨時數組排序上的刪除[],因此而陷入此問題)

回答

1

b3Book,但listoOfBooksBook*的數組。您需要通過Book*addBookToList,不僅僅是爲了分配,而是爲了避免object slicing

如果這不是學習練習,請改用std::vector<Book*>std::vector<std::shared_ptr<Book>>std::vector將根據需要動態增長,智能指針的使用將自動deletevector銷燬時的元素。

如果您選擇使用Book*確保您遵守What is The Rule of Three?。這可能只是通過聲明覆制構造函數和賦值運算符private而使Mang不可複製。

注意ifor循環未初始化和以下分配出的陣列i == lobsize上邊界訪問for後:

listOfBooks[i]=b3; 

數組索引從0運行,因此lobsize - 1是的索引最後的元素。