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