Recapitulaçã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 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 chamadoGreetFuncque recebe umconst char*(um nome a ser cumprimentado) e não retorna nada. Em seguida, defina uma structGreetercontendo umlanguage(umconst char*) e um ponteiro para a 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 conectada à sua respectiva função de saudação. Leia um nome como entrada e, em seguida, chame a funçãogreetde 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
1Fundamentos da Programação Modular
Arquivos de CabeçalhoInclude GuardsArquivos-FonteFunções EstáticasRecapitulação: Calculadora Modular4Encapsulamento
Conceito de Ponteiros OpacosDefinindo Structs OpacasGetters e SettersValidação em SettersRecapitulação: Caixa Secreta2Objetos e Métodos
Structs como ObjetosO Ponteiro 'Self'Const CorrectnessPonteiro vs ValorMétodos AuxiliaresRecapitulação: Point Manager5Projeto: Conta Bancária Simples
Configuração do ProjetoImplementação da Conta8Polimorfismo
Ponteiros de Função em StructsSimulando MétodosO Conceito de InterfaceImplementando InterfacesIteração PolimórficaRecapitulação: Greeter3Ciclo de Vida de Objetos
Padrão de ConstrutorPadrão de DestrutorInicialização na StackCópia ProfundaRecapitulação: String Wrapper6Herança via Composição
Incorporação de StructsA Regra do Primeiro MembroAcessando Membros PaiUpcastingRecapitulação: Hierarquia de Formas9Projeto: Desenhador de Formas
Visão Geral do ProjetoImplementação do CírculoImplementação do RetânguloUso PolimórficoContainer de FormasPratique por conta própria: Compilador de C online