Menu
CoddyTech

回顾:Greeter

本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 43 课,共 61 课。

challenge icon

挑战

简单

让我们构建一个 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 在线编译器