以下是一个涉及指针、类、循环、继承、数组、函数等方面的较为复杂的C++题目,以及一个简单的源程序示例。请注意,这是一个综合性的例子,实际应用场景可能需要根据具体情况进行调整。
题目:
考虑一个图书馆管理系统,设计一个C++程序,包括以下功能:
创建一个基类 Book
,其中包括图书的基本信息(如书名、作者、出版日期等)以及一个纯虚函数 displayInfo
用于显示图书信息。
创建一个派生类 EBook
继承自基类 Book
,其中新增一个成员变量 format
表示电子书的格式(如PDF、EPUB等),并重写 displayInfo
函数以适应电子书的信息展示。
创建一个函数 displayLibrary
,该函数接受一个图书数组(可包含普通图书和电子书),遍历数组,调用每本书的 displayInfo
函数以显示图书信息。
在 main
函数中,创建一个包含不同类型图书的数组,调用 displayLibrary
函数展示所有图书信息。
源程序:
#include <iostream>
#include <string>
class Book {
protected:
std::string title;
std::string author;
int publicationYear;
public:
Book(const std::string& t, const std::string& a, int year) : title(t), author(a), publicationYear(year) {}
virtual void displayInfo() const = 0;
};
class EBook : public Book {
private:
std::string format;
public:
EBook(const std::string& t, const std::string& a, int year, const std::string& f)
: Book(t, a, year), format(f) {}
void displayInfo() const override {
std::cout << "EBook Information:\n";
std::cout << "Title: " << title << "\n";
std::cout << "Author: " << author << "\n";
std::cout << "Publication Year: " << publicationYear << "\n";
std::cout << "Format: " << format << "\n";
std::cout << "---------------------\n";
}
};
void displayLibrary(Book* library[], int size) {
for (int i = 0; i < size; ++i) {
library[i]->displayInfo();
}
}
int main() {
const int librarySize = 3;
Book* library[librarySize];
// 添加不同类型的图书到数组中
library[0] = new Book("The Catcher in the Rye", "J.D. Salinger", 1951);
library[1] = new EBook("Design Patterns", "Erich Gamma", 1994, "PDF");
library[2] = new EBook("The Hitchhiker's Guide to the Galaxy", "Douglas Adams", 1979, "EPUB");
// 显示图书馆中的所有图书信息
displayLibrary(library, librarySize);
// 释放动态分配的内存
for (int i = 0; i < librarySize; ++i) {
delete library[i];
}
return 0;
}
这个示例程序演示了类的继承、纯虚函数、动态内存分配等概念。请注意,在实际应用中,需要根据具体场景进一步扩展和调整代码。