Menu
Coddy logo textTech

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 construindo 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 na fundação da lição anterior, você estenderá 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 um 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 (o 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 do Shape incorporado para apontarem para draw_circle e area_circle, define o raio e retorna o círculo
  • main.c: Reúna tudo. Leia um valor de raio como entrada, crie um círculo usando sua função construtora e, em seguida, chame draw e area por meio dos ponteiros para função do Shape incorporado. Imprima a área com 2 casas decimais.

Seu programa receberá uma entrada: um valor de raio (como um número de ponto flutuante).

Saída de exemplo quando a entrada é 5.0:

Drawing Circle with radius: 5.00
Area: 78.54

Saída de exemplo quando a entrada é 3.5:

Drawing Circle with radius: 3.50
Area: 38.48

A principal ideia é que Circle contém um 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 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 através do ponteiro de função do Shape embutido
    
    // TODO: Chame area através do ponteiro de função do Shape embutido
    // 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