我该如何区分c ++中的每个对象?

时间:2019-12-01 06:52:43

标签: c++ string inheritance vector virtual

我昨天得到了帮助。但我需要更多帮助。

我完成了如何加载图书信息的操作。 但是加载后,我不知道如何区分每个功能。我的解释太糟糕了……这是代码。

这是文本文件。 第一个词是定界符。 a是普通书,b是杂志,c是漫画书。

b japji maxin 1 2 1 
b winage cosmetic 12345 67 2 
c onepice oda 12456 123 1 
a ilban 1 2 3 
c naruto mola 6789 47 1 

这是load.cpp

string loadfile;
    ifstream openfile{"All_in_Book.txt"};

    if(!openfile) {
        cout << "파일을 찾을수 없습니다." << endl;
    }
    else {
        string tmpbookname, tmpauthor, tmpisbn, tmppage, tmpissue, tmpcompare;
        string ilban="a", japji="b", comic="c";
        int counter = 0;
        while(true) {
                openfile >> tmpcompare >>  tmpbookname >> tmpauthor >> tmpisbn >> tmppage >> tmpissue;
                if(ilban.compare(tmpcompare))
                    book.push_back(new Book(tmpbookname, tmpauthor, tmpisbn, tmppage));
                if(japji.compare(tmpcompare))
                    book.push_back(new Magazine(tmpbookname, tmpauthor, tmpisbn, tmppage, tmpissue));
                if(comic.compare(tmpcompare))
                    book.push_back(new ComicBook(tmpbookname, tmpauthor, tmpisbn, tmppage, tmpissue));
            if(openfile.eof()) {
                cout << "총" << counter << "개의 도서 데이터를 불러왔습니다." << endl; // tell us how many book loaded.
                cout << "아무키나 누르면 종료됩니다." << endl;
                getchar();
                break;
            }
            counter++;
        }
    }
}

这是输出。

---일반책의 정보를 출력합니다.---
책 이름 : japji
책 출판사 : maxin
책 ISBN: 1
책 페이지: 2
책 호: : 

---만화책의 정보를 출력합니다.---
만화책 이름 : japji
만화책 작가 : maxin
만화책 ISBN: 1
만화책 페이지: 2
만화책 호 : 1

---일반책의 정보를 출력합니다.---
책 이름 : winage
책 출판사 : cosmetic
책 ISBN: 12345
책 페이지: 67
책 호: : 

---만화책의 정보를 출력합니다.---
만화책 이름 : winage
만화책 작가 : cosmetic
만화책 ISBN: 12345
만화책 페이지: 67
만화책 호 : 2

---일반책의 정보를 출력합니다.---
책 이름 : onepice
책 출판사 : oda
책 ISBN: 12456
책 페이지: 123
책 호: : 

---잡지책의 정보를 출력합니다.---
잡지책 이름 : onepice
잡지책 출판사 : oda
잡지책 ISBN: 12456
잡지책 페이지: 123
잡지책 호 : 1

---잡지책의 정보를 출력합니다.---
잡지책 이름 : ilban
잡지책 출판사 : 1
잡지책 ISBN: 2
잡지책 페이지: 3
잡지책 호 : c

---만화책의 정보를 출력합니다.---
만화책 이름 : ilban
만화책 작가 : 1
만화책 ISBN: 2
만화책 페이지: 3
만화책 호 : c

---일반책의 정보를 출력합니다.---
책 이름 : mola
책 출판사 : 6789
책 ISBN: 47
책 페이지: 1
책 호: : 

---잡지책의 정보를 출력합니다.---
잡지책 이름 : mola
잡지책 출판사 : 6789
잡지책 ISBN: 47
잡지책 페이지: 1
잡지책 호 : c

---만화책의 정보를 출력합니다.---
만화책 이름 : mola
만화책 작가 : 6789
만화책 ISBN: 47
만화책 페이지: 1
만화책 호 : c

这是searchbootk函数。

void Handler::SearchBookInfo(vector<Book*>& book) { // 한 책당 모든 경우의 수가 나와버림.(모두 통일?)
    for (int i = 0; i < book.size(); i++) {
        book[i]->ShowBookInfo();
        cout << endl;
    }
}

所有ShowBookInfo功能都是虚拟的。

#include "Book.h"
#include <iostream>
Book::Book(string book_name, string author, string isbn, string page)
{
    Book_name = book_name;
    Author = author;
    ISBN = isbn;
    PAGE = page;
}

void Book::ShowBookInfo() const {
    cout << "---일반책의 정보를 출력합니다.---" << endl;
    cout << "책 이름 : " << Book_name << endl;
    cout << "책 출판사 : " << Author << endl;
    cout << "책 ISBN: " << ISBN << endl;
    cout << "책 페이지: " << PAGE << endl;
    cout << "책 호: : " << ISSUE << endl;
}
string Book::GetBookName() const {
    return Book_name;
}

Magazine::Magazine(string book_name, string author, string isbn, string page, string Magazine_issue): Book(book_name, author, isbn, page) {
    ISSUE = Magazine_issue;
} // 얕은 복사
void Magazine::ShowBookInfo() const {
    cout << "---잡지책의 정보를 출력합니다.---" << endl;
    cout << "잡지책 이름 : " << Book_name << endl;
    cout << "잡지책 출판사 : " << Author << endl;
    cout << "잡지책 ISBN: " << ISBN << endl;
    cout << "잡지책 페이지: " << PAGE << endl;
    cout << "잡지책 호 : " << ISSUE << endl;
}
string Magazine::GetBookName() const {
    return Book_name;
}

ComicBook::ComicBook(string book_name, string author, string isbn, string page, string Comic_issue) : Book(book_name, author, isbn, page) {
    ISSUE = Comic_issue;
}
void ComicBook::ShowBookInfo() const {
    cout << "---만화책의 정보를 출력합니다.---" << endl;
    cout << "만화책 이름 : " << Book_name << endl;
    cout << "만화책 작가 : " << Author << endl;
    cout << "만화책 ISBN: " << ISBN << endl;
    cout << "만화책 페이지: " << PAGE << endl;
    cout << "만화책 호 : " << ISSUE << endl;
}
string ComicBook::GetBookName() const {
    return Book_name;
}

文本文件内容仅为5。2杂志,2漫画书,1一般书 但是当我调用SearchBookInfo时,它显示的确很奇怪...

我想要的结果是

b(magazine showinfo)
b(magazine showinfo)
c(comic showinfo)
a(general showinfo)
c(comic showinfo)

我该如何解决这个问题?

0 个答案:

没有答案