C++ 在c++;,如何使用vector调用派生类?

C++ 在c++;,如何使用vector调用派生类?,c++,inheritance,vector,C++,Inheritance,Vector,我正在用c编写库程序++ 我申报了图书类、衍生类杂志、漫画类。 我想打印每个类函数(虚拟) 我该怎么办 这是主代码(declare) 如果我想调用类Comicbook ShowBookInfo,请调用ShowBookInfo。 但当我调用函数(SerachBookInfo)时,它不工作。 我不知道如何调用派生类。。。 有人帮我吗?代码已经满足了您的要求。 当实现ShowBookInfo方法以便打印类的名称时 virtual void Book::ShowBookInfo() const{ std

我正在用c编写库程序++

我申报了图书类、衍生类杂志、漫画类。 我想打印每个类函数(虚拟) 我该怎么办

这是主代码(declare)

如果我想调用类Comicbook ShowBookInfo,请调用ShowBookInfo。 但当我调用函数(SerachBookInfo)时,它不工作。 我不知道如何调用派生类。。。
有人帮我吗?

代码已经满足了您的要求。 当实现
ShowBookInfo
方法以便打印类的名称时

virtual void Book::ShowBookInfo() const{ std::cout << "Book\n";}
virtual void Magazine::ShowBookInfo() const{ std::cout << "Magazine\n"; }
virtual void ComicBook::ShowBookInfo() const {std::cout << "ComicBook\n"; }
然后是一个调用
ShowBookInfo
的方法,就像在
Handler::SearchBookInfo

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

请参阅工作版本。

您的意思是什么?在
SearchBookInfo
中,将在每个对象上调用方法
ShowBookInfo
。由于它是
虚拟的
,因此将从正确的对象调用它(取决于在
向量中插入的内容)。我不确定您想要什么。现在,当您在指向
ComicBook
b
类型的
Book*
上调用
ComicBook::ShowBookInfo
时,您的代码应该调用
ComicBook::ShowBookInfo
。如果您不想这样做,只需删除
ComicBook
中的方法,然后它将调用
Book::ShowBookInfo
。另外:您的基类没有虚拟析构函数,因此您将调用未定义的行为,请参阅。最好使用
std::unique_ptr
而不是原始指针。我的意思是我只想调用派生类函数。例如,如果我想调用Book->ShowBookInfo,请调用ShowBookInfo。或者想打电话给杂志->ShowBookInfo,打电话给Show Magazine->ShowBookInfo
void Handler::SearchBookInfo(vector<Book*>& book) { // 일반책만 나오는 문제를 수정해야함.
  for(int i=0; i< book.size(); i++)
      book[i]->ShowBookInfo();
}
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;
}; // 만화
virtual void Book::ShowBookInfo() const{ std::cout << "Book\n";}
virtual void Magazine::ShowBookInfo() const{ std::cout << "Magazine\n"; }
virtual void ComicBook::ShowBookInfo() const {std::cout << "ComicBook\n"; }
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));
}
void SearchBookInfo(vector<Book*>& book) { 
  for(auto i=0u; i< book.size(); i++)
      book[i]->ShowBookInfo();
}
Book
Magazine
ComicBook