Revisão: Greeter
Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 43 de 61.
Desafio
FácilVamos criar um sistema Greeter que demonstra polimorfismo por meio de ponteiros de função: o mesmo tipo de struct produz diferentes saídas dependendo de qual função de saudação está atribuída.
Você organizará seu código em três arquivos:
greeter.h: Defina aqui sua interface de saudação. Crie um tipo de ponteiro de função chamadoGreetFuncque recebe umconst char*(um nome para saudar) e não retorna nada. Em seguida, defina uma structGreeterque contenha umlanguage(umconst char*) e um ponteiro de funçãogreetdo tipoGreetFunc.greeter.c: Implemente as funções de saudação que representam diferentes idiomas:greet_english: imprimeHello, name!greet_spanish: imprimeHola, name!
main.c: Reúna tudo aqui. Crie duas instâncias deGreeter, uma para inglês e outra para espanhol, cada uma associada à sua respectiva função de saudação. Leia um nome como entrada e, em seguida, chame a funçãogreetem ambos os saudadores para demonstrar o comportamento polimórfico.
Seu programa receberá uma única entrada: um nome para saudar.
Crie um saudador em inglês com o idioma definido como English e um saudador em espanhol com o idioma definido como Spanish. Para cada saudador, imprima seu idioma seguido de dois-pontos e um espaço; em seguida, 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 saudadores 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 arquivo de cabeçalho.
Experimente você mesmo
#include <stdio.h>
#include <string.h>
#include "greeter.h"
int main() {
// Leia o nome fornecido
char name[100];
scanf("%s", name);
// TODO: Crie um saudador em inglês
// - Defina language como "English"
// - Defina greet como a função greet_english
// TODO: Crie um saudador em espanhol
// - Defina language como "Spanish"
// - Defina greet como a função greet_spanish
// TODO: Para cada saudador:
// 1. Imprima language seguido de ": "
// 2. Chame a função greet com o nome
return 0;
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos da Programação Modular
Arquivos de cabeçalhoProteções de inclusãoArquivos-fonteFunções estáticasRevisão: calculadora modular4Encapsulamento
Conceito de ponteiros opacosDefinindo structs opacasGetters e settersValidação em settersRevisão: caixa secreta2Objetos e métodos
Structs como objetosO ponteiro 'Self'Correção de constPonteiro vs. valorMétodos auxiliaresRevisão: Gerenciador de pontos5Projeto: Conta Bancária Simples
Configuração do ProjetoImplementação da Conta3Ciclo de vida do objeto
Padrão de construtorPadrão de destrutorInicialização da pilhaCópia profundaRevisão: wrapper de String6Herança por composição
Incorporação de structRegra do primeiro membroAcessando membros do tipo paiUpcastingRevisão: hierarquia de formas9Projeto: Desenhador de Formas
Visão geral do projetoImplementação do círculoImplementação do retânguloUso polimórficoContêiner de formasPratique por conta própria: Compilador de C online