用C++语言直接写一个代码不要复述文字,要求 在主函数中,可以创建一个指向 Book 类的指针数组,然后动态地创建 Book 类的对象和 EBook 类的对象,将这些对象存储到指针数组中。然后,可以通过循环来调用每个对象的 print() 函数,实现多态输出。
时间: 2023-09-08 20:04:58 浏览: 91
### 回答1:
首先,我们需要定义 Book 类和 EBook 类,下面是一个示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义 Book 类
typedef struct {
char title[50];
char author[50];
int page_count;
} Book;
// 定义 EBook 类,继承自 Book 类
typedef struct {
Book book;
double size;
char format[20];
} EBook;
// 定义 print() 函数
void print(Book *book) {
printf("书名: %s\n", book->title);
printf("作者: %s\n", book->author);
printf("页数: %d\n", book->page_count);
}
int main(int argc, char **argv) {
// 创建指向 Book 类的指针数组
Book *books[2];
// 创建 Book 类的对象
Book book1;
strcpy(book1.title, "《C 编程语言》");
strcpy(book1.author, "Brian Kernighan");
book1.page_count = 528;
books[0] = &book1;
// 创建 EBook 类的对象
EBook ebook1;
strcpy(ebook1.book.title, "《Python 入门教程》");
strcpy(ebook1.book.author, "Guido van Rossum");
ebook1.book.page_count = 320;
ebook1.size = 1.5;
strcpy(ebook1.format, "PDF");
books[1] = (Book *)&ebook1;
// 通过循环调用 print() 函数,实现多态输出
for (int i = 0; i < 2; i++) {
print(books[i]);
}
return 0;
}
```
在这个示例中,我们创建了两个对象:一个是 Book 类的对象 book1,另一个是 EBook 类的对象 ebook1。然后将这两个对象的地址分别存储到指针数组 books 中。最后,我们通过循环
### 回答2:
#include <stdio.h>
#include <stdlib.h>
// 定义 Book 类
typedef struct {
char* title;
char* author;
int year;
} Book;
// 定义 EBook 类继承自 Book 类
typedef struct {
Book base;
int size;
} EBook;
// 定义 Book 类的 print() 函数
void bookPrint(Book* book) {
printf("书名:%s\n", book->title);
printf("作者:%s\n", book->author);
printf("出版年份:%d\n", book->year);
}
// 定义 EBook 类的 print() 函数
void ebookPrint(EBook* ebook) {
bookPrint((Book*)ebook); // 调用基类的 print() 函数
printf("文件大小:%d KB\n", ebook->size);
}
int main() {
// 创建指向 Book 类的指针数组
Book* bookArray[2];
// 动态创建 Book 类的对象和 EBook 类的对象,并存储到指针数组中
Book* book1 = malloc(sizeof(Book));
book1->title = "书籍1";
book1->author = "作者1";
book1->year = 2020;
bookArray[0] = book1;
EBook* ebook1 = malloc(sizeof(EBook));
ebook1->base.title = "电子书1";
ebook1->base.author = "作者2";
ebook1->base.year = 2021;
ebook1->size = 100;
bookArray[1] = (Book*)ebook1;
// 通过循环调用每个对象的 print() 函数,实现多态输出
for (int i = 0; i < 2; i++) {
if (ebook1->size > 0) {
ebookPrint((EBook*)bookArray[i]); // 调用 derived class 的 print() 函数
} else {
bookPrint((Book*)bookArray[i]); // 调用 base class 的 print() 函数
}
}
// 释放内存
free(book1);
free(ebook1);
return 0;
}
### 回答3:
#include <stdio.h>
#include <stdlib.h>
// 定义Book类
typedef struct {
void (*print)();
} Book;
// 定义EBook类
typedef struct {
Book book;
char *format;
} EBook;
// 定义Book的print函数
void bookPrint() {
printf("This is a Book.\n");
}
// 定义EBook的print函数
void ebookPrint() {
printf("This is an EBook.\n");
}
int main() {
// 创建指向Book类的指针数组
Book *books[2];
// 动态地创建Book类的对象
Book *book = (Book *)malloc(sizeof(Book));
book->print = bookPrint;
// 动态地创建EBook类的对象
EBook *ebook = (EBook *)malloc(sizeof(EBook));
ebook->book.print = ebookPrint;
ebook->format = "PDF";
// 将Book和EBook对象存储到指针数组中
books[0] = book;
books[1] = &(ebook->book);
// 通过循环调用每个对象的print()函数,实现多态输出
for (int i = 0; i < 2; i++) {
books[i]->print();
}
// 释放内存
free(book);
free(ebook);
return 0;
}