Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

Vamos 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 base Shape da lição anterior, com os tipos de ponteiro para função DrawFunc e AreaFunc.
  • circle.h: Defina sua struct Circle aqui. Um círculo incorpora Shape como seu primeiro membro (permitindo a regra do primeiro membro para conversão para o tipo base) e adiciona um campo radius do tipo double. Declare uma função construtora create_circle que recebe um raio e retorna um Circle por valor.
  • circle.c: Implemente aqui o comportamento específico do círculo:
    • draw_circle: imprime Drawing Circle with radius: X.XX (raio exibido com 2 casas decimais)
    • area_circle: retorna π × raio² (use 3.14159 para π)
    • create_circle: inicializa um Circle, conecta os ponteiros para função da Shape incorporada para apontarem para draw_circle e area_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 tanto draw quanto area por meio dos ponteiros para função da Shape incorporada. 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.54

Exemplo de saída quando a entrada é 3.5:

Drawing Circle with radius: 3.50
Area: 38.48

A 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

Pratique por conta própria: Compilador de C online