用C++语言写一个完整代码 在主函数中,可以创建一个指向 Book 类的指针数组,然后动态地创建 Book 类的对象和 EBook 类的对象,将这些对象存储到指针数组中。然后,可以通过循环来调用每个对象的 print() 函数,实现多态输出。 另外,可以编写一个静态函数 menu(),用于输出操作菜单,让用户选择要进行的操作,例如添加图书、删除图书等。
时间: 2023-02-13 11:04:58 浏览: 117
以下是用 C 语言写的完整代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 100
// 定义 Book 类
typedef struct {
char title[128];
char author[64];
int pages;
} Book;
// 定义 EBook 类,继承自 Book
typedef struct {
Book book;
char format[16];
float size;
} EBook;
// Book 类的虚函数表
typedef struct {
void (*print)(Book*);
} BookVtable;
// EBook 类的虚函数表,继承自 Book 类的虚函数表
typedef struct {
BookVtable book_vtable;
void (*print)(EBook*);
} EBookVtable;
// Book 类的成员函数,打印图书信息
void book_print(Book* book) {
printf("书名: %s\n", book->title);
printf("作者: %s\n", book->author);
printf("页数: %d\n", book->pages);
}
// EBook 类的成员函数,打印电子书信息
void ebook_print(EBook* ebook) {
// 调用超类的成员函数
ebook->book_vtable.book_vtable.print((Book*)ebook);
printf("格式: %s\n", ebook->format);
printf("大小: %.2fMB\n", ebook->size);
}
// 初始化 Book 类的虚函数表
void init_book_vtable(BookVtable* vtable) {
vtable->print = book_print;
}
// 初始化 EBook 类的虚函数表
void init_ebook_vtable(EBookVtable* vtable) {
init_book_vtable(&vtable->book_vtable.book_vtable);
vtable->print = ebook_print;
}
// 创建 Book 类的对象
Book* create_book(const char* title, const char* author, int pages) {
Book* book = (Book*)malloc(sizeof(Book));
BookVtable* vtable = (BookVtable*)malloc(sizeof(BookVtable));
init_book_vtable(vtable);
strcpy(book->title, title);
strcpy(book->author, author);
book->pages = pages;
book
阅读全文