用C++语言直接编写代码不要复述文字,在主函数中,可以创建一个指向 Book 类的指针数组,然后动态地创建 Book 类的对象和 EBook 类的对象,将这些对象存储到指针数组中。然后,可以通过循环来调用每个对象的 print() 函数,实现多态输出。要求程序可以用DEV软件运行
时间: 2023-09-09 19:05:36 浏览: 207
### 回答1:
首先,我们需要定义 `Book` 类和 `EBook` 类。
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_NAME_LEN 100
typedef struct {
char title[MAX_NAME_LEN];
char author[MAX_NAME_LEN];
int page_count;
} Book;
void book_print(Book *book) {
printf("书名: %s\n", book->title);
printf("作者: %s\n", book->author);
printf("页数: %d\n", book->page_count);
}
typedef struct {
char title[MAX_NAME_LEN];
char author[MAX_NAME_LEN];
char file_size[MAX_NAME_LEN];
char format[MAX_NAME_LEN];
} EBook;
void ebook_print(EBook *ebook) {
printf("书名: %s\n", ebook->title);
printf("作者: %s\n", ebook->author);
printf("文件大小: %s\n", ebook->file_size);
printf("格式: %s\n", ebook->format);
}
```
然后,我们可以在主函数中创建一个指向 `Book` 类的指针数组,并动态地创建 `Book` 类的对象和 `EBook` 类的对象,将这些对象存储到指针数组中。
```c
int main(int argc, char **argv) {
Book **books = (Book**) malloc(sizeof(Book*) * 2);
books[0] = (Book*) malloc(sizeof(Book));
strcpy(books[0]->title, "海底两万里");
strcpy(books[0]->author, "卢梭");
books[0]->page_count = 400;
books[1] = (EBook*) malloc(sizeof(EBook));
strcpy(books[1]->title, "蒙娜丽莎的微笑");
strcpy(books[1]->author, "莫里斯·梵高");
strcpy(((EBook*) books[1])->file_size, "1MB");
strcpy(((EBook*) books[1])->format, "PDF");
return 0;
}
```
最后,可以通过循环来调用每个对象
### 回答2:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char* title;
int price;
} Book;
typedef struct {
Book book;
char* format;
} EBook;
void printBook(Book* book) {
printf("Book: %s, price: %d\n", book->title, book->price);
}
void printEBook(EBook* ebook) {
printf("EBook: %s, price: %d, format: %s\n", ebook->book.title, ebook->book.price, ebook->format);
}
int main() {
Book b1 = {"Book 1", 10};
EBook eb1 = {b1, "PDF"};
Book* bookPtrs[2];
bookPtrs[0] = &b1;
bookPtrs[1] = (Book*)&eb1;
for (int i = 0; i < 2; i++) {
if (bookPtrs[i]->price > 0) {
printBook(bookPtrs[i]);
} else {
printEBook((EBook*)bookPtrs[i]);
}
}
return 0;
}
### 回答3:
为了使用C语言编写代码,我们首先需要定义两个类:Book和EBook。然后我们可以在主函数中创建一个指向Book类的指针数组,并动态地创建Book类的对象和EBook类的对象,并将它们存储到这个指针数组中。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义Book类
typedef struct {
char* title;
} Book;
// 定义EBook类,继承自Book类
typedef struct {
Book base;
char* format;
} EBook;
// 定义Book类的print函数
void printBook(Book* book) {
printf("Book title: %s\n", book->title);
}
// 定义EBook类的print函数
void printEBook(EBook* ebook) {
printf("EBook title: %s, format: %s\n", ebook->base.title, ebook->format);
}
int main() {
// 创建Book类和EBook类的对象
Book book1 = {.title = "Book 1"};
EBook ebook1 = {.base = {.title = "EBook 1"}, .format = "pdf"};
// 创建指向Book类的指针数组,存储Book对象和EBook对象
Book* books[2];
books[0] = &book1;
books[1] = (Book*)&ebook1;
// 通过循环调用每个对象的print函数,实现多态输出
for (int i = 0; i < 2; i++) {
if (books[i]->format != NULL) {
printEBook((EBook*)books[i]);
} else {
printBook(books[i]);
}
}
return 0;
}
```
在这段代码中,我们定义了Book类和EBook类的结构体,并分别定义了它们的打印函数printBook()和printEBook()。在主函数中,我们创建了Book对象book1和EBook对象ebook1,并将它们存储到指针数组books中。然后我们通过循环遍历该数组,并根据对象的类型调用相应的打印函数,实现多态输出。
这段代码可以使用DEV软件来编译和运行。
阅读全文