Menu
Coddy logo textTech

Recapitulação: Greeter

Parte da seção Object Oriented Programming do Journey de C da Coddy — lição 43 de 61.

challenge icon

Desafio

Fácil

Vamos construir um sistema Greeter que demonstra polimorfismo através de ponteiros de função — o mesmo tipo de struct produzindo saídas diferentes com base em qual função de saudação está conectada.

Você organizará seu código em três arquivos:

  • greeter.h: Defina sua interface de saudação aqui. Crie um tipo de ponteiro de função chamado GreetFunc que recebe um const char* (um nome para saudar) e não retorna nada. Em seguida, defina uma struct Greeter contendo um language (um const char*) e um ponteiro de função greet do tipo GreetFunc.
  • greeter.c: Implemente as funções de saudação que representam diferentes idiomas:
    • greet_english — imprime Hello, name!
    • greet_spanish — imprime Hola, name!
  • main.c: Reúna tudo aqui. Crie duas instâncias de Greeter — uma para inglês e outra para espanhol — cada uma conectada à sua respectiva função de saudação. Leia um nome como entrada e, em seguida, chame a função greet em ambos os greeters para demonstrar o comportamento polimórfico.

Seu programa receberá uma única entrada: um name para saudar.

Crie um greeter de inglês com o idioma definido como English e um greeter de espanhol com o idioma definido como Spanish. Para cada greeter, imprima seu idioma seguido por dois pontos e um espaço, e então chame sua função greet com o nome de entrada.

Exemplo de saída quando a entrada é Maria:

English: Hello, Maria!
Spanish: Hola, Maria!

Exemplo de saída quando a entrada é Carlos:

English: Hello, Carlos!
Spanish: Hola, Carlos!

Ambos os greeters são do mesmo tipo Greeter, mas produzem saudações diferentes porque cada um tem uma função diferente atribuída ao seu membro greet. Lembre-se de usar include guards em seu arquivo de cabeçalho.

Experimente você mesmo

#include <stdio.h>
#include <string.h>
#include "greeter.h"

int main() {
    // Lê a entrada do nome
    char name[100];
    scanf("%s", name);
    
    // TODO: Criar um greeter em Inglês
    // - Definir language como "English"
    // - Definir greet para a função greet_english
    
    
    // TODO: Criar um greeter em Espanhol
    // - Definir language como "Spanish"
    // - Definir greet para a função greet_spanish
    
    
    // TODO: Para cada greeter:
    // 1. Imprimir o idioma seguido por ": "
    // 2. Chamar a função greet com o name
    
    
    return 0;
}

Todas as lições de Object Oriented Programming