언어 자료구조 알고리즘/[C++]디딤돌 자료구조와 알고리즘

8.6 도서 삭제 및 소멸 [디딤돌 자료구조와 알고리즘 with C++]

언제나휴일 2016. 4. 4. 11:58
반응형

8.6 도서 삭제 및 소멸

마지막으로 도서 삭제 기능과 소멸자를 구현합시다.

void App::RemoveBook() //도서 삭제

{

장르를 선택하세요.

    Genre *genre = SelectGenre();

    if(genre == 0)

    {

잘못 선택하였으면 메시지를 출력하고 종료합니다.

        cout<<"잘못 선택하였습니다."<<endl;

        return;

    }

장르에 도서 삭제 메서드를 호출하세요. 아직 추가하지 않은 메서드입니다. 장르의 RemoveBook 메서드는 도서의 ISBN을 반환해야 합니다. 만약 이를 하지 않으면 이미 소멸한 도서 개체가 Appbookdic에 남아있어 버그가 발생합니다.

    string isbn = genre->RemoveBook();

isbn을 인자로 bookdic에 보관한 값을 0으로 리셋하세요.

    bookdic[isbn] = 0;  

}

Genre 클래스에 RemoveBook 메서드를 추가하세요.

class Genre

{

    ...중략...

    string RemoveBook();

};

GenreRemoveBook을 구현합시다.

string Genre::RemoveBook()

{

삭제할 도서 구분자를 입력받습니다.

    cout<<"장르 내 도서 구분자(1~100):";

    int bnum = ehglobal::getnum();

    if((bnum<1)||(bnum>100))

    {

입력한 도서 구분자가 유효한 값이 아니면 메시지를 출력하고 빈 문자열을 반환하세요.

        cout<<"범위를 벗어난 도서 구분자입니다."<<endl;       

        return "";

    }   

    if(books[bnum-1])

    {

도서 개체가 있다면 도서의 ISBN을 구합니다. 아직 Book 클래스에 추가하지 않으 메서드입니다.

        string isbn = books[bnum-1]->GetISBN();

그리고 도서 개체를 소멸한 후에 0으로 리셋하세요.

        delete books[bnum-1];

        books[bnum-1] = 0;

isbn을 반환하세요.

        return isbn;

    }

입력한 도서가 없으면 메시지를 출력하고 빈 문자열을 반환하세요.

    cout<<"없는 도서입니다."<<endl;

    return "";

}

class Book

{

    ...중략...

    string GetISBN()const;

};

string Book::GetISBN()const

{

    return isbn;

}

 

이제 소멸자를 구현합시다.

App::~App(void)

{

App에서 생성한 장르 개체를 소멸합니다. 반복자를 이용하여 전체 장르 개체를 소멸하세요.

    GIter seek = genres.begin();

    GIter last = genres.end();

    Genre *genre = 0;

    for(   ;seek != last ; ++seek)

    {

        genre = *seek;

        delete genre;

    }

}

Genre::~Genre(void)

{

장르 소멸자에서는 인덱스 연산으로 값이 참인 모든 도서 개체를 소멸하세요.

    for(int index=0; index<max_book;++index)

    {

        if(books[index])

        {

            delete books[index];

        }

    }

}

반응형