2012-06-26 2 views
1

나는, 클래스 책 2 서브 클래스 lerningbook이 을 readingbook 내가 노력하고 때 나는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; 
} 

문제가 서브 클래스를 * 을 listofbooks을 책 책의 목록을 작성하고 추가하는 것을 시도하고있다 그것을 내가 함수가 어떤 수업을 할 수 있도록 템플릿을 사용하는 tryed이이 을 accpecting하지 않는 서브 클래스를 보낼 수 있지만 오류 오전에 geting이
도움이 didnt가 : lerning에서
더 적합한 사용자 정의 변환 책이 책은 내가 나에게이 작업을 수행 할 수 있도록 기능의 동일한 유형을 구현해야 추측
exsists하지만 난 당신이 중 하나가 ADV에서 들으 나를 도울 수 있습니다 : 는
(나는 내가 알고 느릅 나무 하나 개 희망을 잘 모릅니다 종류의이 문제에 붙어있어 임시 배열)

답변

1

b3에 [] 삭제 누락하는 것은 Book이지만, listoOfBooksBook*의 배열입니다. 당신은 Book*addBookToList에 전달해야합니다. 부양을 위해서가 아니라 object slicing을 피하십시오.

학습 연습이 아닌 경우 std::vector<Book*> 또는 std::vector<std::shared_ptr<Book>>을 사용하십시오. std::vector은 필요에 따라 동적으로 커지고 vector이 파괴되면 스마트 포인터를 사용하면 요소가 자동으로 delete이됩니다.

Book*의 사용을 선택하는 경우 What is The Rule of Three?을 준수해야합니다. 복사 생성자 및 할당 연산자 private을 선언하여 Mang을 복사 불가능으로 만들 수 있습니다.

ifor 루프에서 초기화되지 않은되며, 다음과 같은 할당은 fori == lobsize으로 배열 경계 액세스를 벗어 것으로 도시 :

listOfBooks[i]=b3; 

배열 인덱스 그래서 lobsize - 1가의 인덱스는 0에서 실행 마지막 요소.