用c++语言编写一个完整代码 要求在主函数中,可以创建一个指向 Book 类的指针数组,然后动态地创建 Book 类的对象和 EBook 类的对象,将这些对象存储到指针数组中。然后,可以通过循环来调用每个对象的 print() 函数,实现多态输出。
时间: 2023-02-09 20:38:14 浏览: 106
以下是一个示例代码,它实现了创建一个指向 Book 类的指针数组,然后动态地创建 Book 类的对象和 EBook 类的对象,将这些对象存储到指针数组中,最后通过循环来调用每个对象的 print() 函数,实现多态输出。
```
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
// 定义 Book 类
class Book {
public:
Book(const char* title, const char* author, int pageCount)
: title(title), author(author), pageCount(pageCount) {}
virtual void print() {
cout << "Book: " << title << ", " << author << ", " << pageCount << " pages" << endl;
}
protected:
const char* title;
const char* author;
int pageCount;
};
// 定义 EBook 类,继承自 Book 类
class EBook : public Book {
public:
EBook(const char* title, const char* author, int pageCount, const char* fileSize)
: Book(title, author, pageCount), fileSize(fileSize) {}
void print() override {
cout << "EBook: " << title << ", " << author << ", " << pageCount << " pages, " << fileSize << endl;
}
private:
const char* fileSize;
};
int main() {
// 创建一个指向 Book 类的指针数组
vector<Book*> books;
// 动态地创建 Book 类的对象和 EBook 类的对象,将这些对象存储到指针数组中
books.push_back(new Book("C++ Primer", "Stanley B. Lippman", 1008));
books.push_back(new EBook("JavaScript: The Definitive Guide", "David Flanagan", 1136, "5MB"));
books.push_back(new EBook("Effective Python", "Brett Slatkin", 240, "2MB"));
// 通过循环来调用每个对象的 print() 函数,实现多态输出
for (Book* book : books) {
book->print();
}
阅读全文