回顾:Greeter
本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 43 课,共 61 课。
挑战
简单让我们构建一个 Greeter 系统,通过函数指针演示多态:同一种结构体类型可以根据指定的问候函数生成不同的输出。
你需要将代码分散到三个文件中:
greeter.h:在这里定义问候接口。创建一个名为GreetFunc的函数指针类型,它接受一个const char*(要问候的名字),且不返回任何值。然后定义一个Greeter结构体,其中包含一个language(类型为const char*)和一个类型为GreetFunc的greet函数指针。greeter.c:实现代表不同语言的问候函数:greet_english:输出Hello, name!greet_spanish:输出Hola, name!
main.c:在这里将所有内容组合起来。创建两个Greeter实例,一个用于英语,一个用于西班牙语,并分别指定对应的问候函数。读取一个名字作为输入,然后分别调用两个问候器的greet函数,演示多态行为。
程序会收到一个输入:要问候的名字。
创建一个语言设置为 English 的英语问候器,以及一个语言设置为 Spanish 的西班牙语问候器。对于每个问候器,先输出其语言,后面跟一个冒号和一个空格,然后调用它的 greet 函数,并传入输入的名字。
输入为 Maria 时的输出示例:
English: Hello, Maria!
Spanish: Hola, Maria!输入为 Carlos 时的输出示例:
English: Hello, Carlos!
Spanish: Hola, Carlos!两个问候器都是同一种 Greeter 类型,但它们会生成不同的问候语,因为各自的 greet 成员指定了不同的函数。记得在头文件中使用包含保护。
亲手试试
#include <stdio.h>
#include <string.h>
#include "greeter.h"
int main() {
// 读取姓名输入
char name[100];
scanf("%s", name);
// TODO:创建一个英语问候器
// 将 language 设置为 "English"
// 将 greet 设置为 greet_english 函数
// TODO:创建一个西班牙语问候器
// 将 language 设置为 "Spanish"
// 将 greet 设置为 greet_spanish 函数
// TODO:对每个问候器:
// 1. 输出语言,后面紧跟 ": "
// 2. 用姓名调用 greet 函数
return 0;
}
面向对象编程中的所有课
自己练习: C 在线编译器