在 c++ 中,如何使用向量调用派生类?
In c++, how can i call derived class using vector?
我正在使用 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
在此处查看工作版本。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 调用派生类成员函数
- 从基类实例调用派生类方法而不进行强制转换
- 从基类 (C++) 调用派生类中的非虚函数
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何从 Gtk::窗口调用派生对象的析构函数
- 在dynamic_pointer_cast后调用派生类的构造函数
- 从 Base 引用对象调用派生类的成员
- 有没有办法在没有虚拟的情况下使用基类指针调用派生类函数
- 在 c++ 中,如何使用向量调用派生类?
- C++通过 const 引用传递时不调用派生类函数
- 哪个基类调用派生重写的方法?
- 如何从包含基类指针的容器中调用派生类函数(基于其类型)?
- 如何调用派生类之一
- 从基类数组调用派生函数
- 从具有泛型返回类型的 crtp 基类调用派生类中的函数
- 基类如何调用派生类在 c++ 中传递的闭包?
- 通过在基类中虚拟调用派生类中的函数来访问派生类中的函数
- 如何在另一个类的向量中调用派生类的析构函数
- 通过reinterpret_casting方法指针从指针调用派生类的方法。这是 UB 吗?