Implementação do círculo
Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 45 de 61.
Desafio
FácilVamos continuar desenvolvendo o projeto Shape Drawer implementando o Circle: uma forma concreta que incorpora a struct base Shape e fornece sua própria lógica de desenho e cálculo de área.
Com base nos fundamentos da lição anterior, você vai expandir seu projeto com estes arquivos:
shape.h: Mantenha sua interface baseShapeda lição anterior, com os tipos de ponteiro para funçãoDrawFunceAreaFunc.circle.h: Defina sua structCircleaqui. Um círculo incorporaShapecomo seu primeiro membro (permitindo a regra do primeiro membro para conversão para o tipo base) e adiciona um camporadiusdo tipodouble. Declare uma função construtoracreate_circleque recebe um raio e retorna umCirclepor valor.circle.c: Implemente aqui o comportamento específico do círculo:draw_circle: imprimeDrawing Circle with radius: X.XX(raio exibido com 2 casas decimais)area_circle: retorna π × raio² (use3.14159para π)create_circle: inicializa umCircle, conecta os ponteiros para função daShapeincorporada para apontarem paradraw_circleearea_circle, define o raio e retorna o círculo
main.c: Junte tudo. Leia um valor de raio como entrada, crie um círculo usando sua função construtora e, em seguida, chame tantodrawquantoareapor meio dos ponteiros para função daShapeincorporada. Imprima a área com 2 casas decimais.
Seu programa receberá uma entrada: um valor de raio (como número de ponto flutuante).
Exemplo de saída quando a entrada é 5.0:
Drawing Circle with radius: 5.00
Area: 78.54Exemplo de saída quando a entrada é 3.5:
Drawing Circle with radius: 3.50
Area: 38.48A ideia principal é que Circle contém uma Shape como seu primeiro membro, então você pode acessar os ponteiros para função por meio de circle.base.draw e circle.base.area (ou qualquer que seja o nome que você dê ao membro incorporado). Ao chamar essas funções, passe um ponteiro para o membro Shape. Lembre-se de usar guardas de inclusão em todos os arquivos de cabeçalho.
Experimente você mesmo
#include <stdio.h>
#include "shape.h"
#include "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: Crie um Circle usando create_circle
// TODO: Chame draw por meio do ponteiro de função do Shape incorporado
// TODO: Chame area por meio do ponteiro de função do Shape incorporado
// e imprima com 2 casas decimais: "Area: %.2f\n"
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