Menu
Coddy logo textTech

Recapitulação: Greeter

Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 43 de 61.

challenge icon

Desafio

Fácil

Vamos criar um sistema Greeter que demonstra polimorfismo por meio de ponteiros para funções: o mesmo tipo de struct produz saídas diferentes com base na função de saudação conectada a ele.

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

  • greeter.h: defina sua interface de saudação aqui. Crie um tipo de ponteiro para função chamado GreetFunc que recebe um const char* (um nome a ser cumprimentado) e não retorna nada. Em seguida, defina uma struct Greeter contendo um language (um const char*) e um ponteiro para a 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 de ambos os greetings para demonstrar o comportamento polimórfico.

Seu programa receberá uma única entrada: um nome a ser cumprimentado.

Crie um greeter em inglês com o idioma definido como English e um greeter em espanhol com o idioma definido como Spanish. Para cada greeter, imprima seu idioma seguido de dois-pontos e um espaço; em seguida, chame sua função greet com o nome fornecido como 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 greetings 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 guardas de inclusão no seu arquivo de cabeçalho.

Experimente você mesmo

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

int main() {
    // Ler a entrada do nome
    char name[100];
    scanf("%s", name);
    
    // TODO: Criar um greeter em inglês
    // - Defina language como "English"
    // - Defina greet como a função greet_english
    
    
    // TODO: Criar um greeter em espanhol
    // - Defina language como "Spanish"
    // - Defina greet como a função greet_spanish
    
    
    // TODO: Para cada greeter:
    // 1. Imprima o language seguido de ": "
    // 2. Chame a função greet com o name
    
    
    return 0;
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C online