在 c++ 中,如何使用向量调用派生类?

In c++, how can i call derived class using vector?

本文关键字:调用 派生 向量 何使用 c++      更新时间:2023-10-16

我正在使用 C++ 编写库程序

我宣布了书籍类,衍生类杂志,漫画书。 我想打印每个类函数(虚拟( 我该怎么办?

这是主代码(声明(

vector<Member> MemberInfo;
vector<Book*> BookInfo;
handler.SearchBookInfo(BookInfo);

这是处理程序.cpp(加载书籍信息(

void Handler::BookLoad(vector<Book*>& book) {
string loadfile;
ifstream openfile{"All_in_Book.txt"};
if(!openfile) {
cout << "파일을 찾을수 없습니다." << endl;
}
else {
string tmpbookname, tmpauthor, tmpisbn, tmppage, tmpissue, comparenum;
string ilban="a", jap="b", comic="c";
int counter = 0;
while(true) {
openfile>> comparenum >> tmpbookname >> tmpauthor >> tmpisbn >> tmppage >> tmpissue;
if(comparenum.compare(ilban) == 0)
book.push_back(new Book(tmpbookname, tmpauthor, tmpisbn, tmppage));
else if(comparenum.compare(jap) == 0) {
book.push_back(new Magazine(tmpbookname, tmpauthor, tmpisbn, tmppage, tmpissue));
}
else if(comparenum.compare(comic) == 0)
book.push_back(new ComicBook(tmpbookname, tmpauthor, tmpisbn, tmppage, tmpissue));
if(openfile.eof()) {
cout << "총" << counter << "개의 도서 데이터를 불러왔습니다." << endl;
cout << "아무키나 누르면 종료됩니다." << endl;
getchar();
break;
}
counter++;
}
}
}

这是打印功能

void Handler::SearchBookInfo(vector<Book*>& book) { // 일반책만 나오는 문제를 수정해야함.
for(int i=0; i< book.size(); i++)
book[i]->ShowBookInfo();
}

这是书中的功能.cpp

class Book { // 기본적인 책의 틀
protected:
string Book_name, Author, ISBN, PAGE, ISSUE;
public:
Book(string book_name, string author, string isbn, string page);
Book() {};
virtual string GetBookName() const;
virtual void ShowBookInfo() const;
};
class Magazine : public Book {
public:
Magazine(string book_name, string author, string isbn, string page, string Magazine_issue);
Magazine() {};
virtual string GetBookName() const;
virtual void ShowBookInfo() const;
}; // 잡지
class ComicBook : public Book{
public:
ComicBook(string book_name, string author, string isbn, string page, string Comic_issue);
ComicBook() {};
virtual string GetBookName() const;
virtual void ShowBookInfo() const;
}; // 만화

如果我想称班级为Comicbook ShowBookInfo,请致电ShowBookInfo。 但是当我调用函数(SerachBookInfo(时,不起作用。 而且我不知道如何称呼派生类... 有人可以帮助我吗?

代码已经完成了你想要的。 当实现ShowBookInfo方法以便它打印类的名称时

virtual void Book::ShowBookInfo() const{ std::cout << "Bookn";}
virtual void Magazine::ShowBookInfo() const{ std::cout << "Magazinen"; }
virtual void ComicBook::ShowBookInfo() const {std::cout << "ComicBookn"; }

以及当三种不同的书籍类型以与Handler::BookLoad方法相同的方式添加时

void BookLoad(vector<Book*>& book) {
string tmpbookname, tmpauthor, tmpisbn, tmppage, tmpissue, comparenum;
book.push_back(new Book(tmpbookname, tmpauthor, tmpisbn, tmppage));
book.push_back(new Magazine(tmpbookname, tmpauthor, tmpisbn, tmppage, tmpissue));
book.push_back(new ComicBook(tmpbookname, tmpauthor, tmpisbn, tmppage, tmpissue));
}

然后是一个调用ShowBookInfo的方法,就像在你的Handler::SearchBookInfo

void SearchBookInfo(vector<Book*>& book) { 
for(auto i=0u; i< book.size(); i++)
book[i]->ShowBookInfo();
}

将输出派生类的文本。

Book
Magazine
ComicBook

在此处查看工作版本。