Menu
Coddy logo textTech

Implementação do Círculo

Parte da seção Object Oriented Programming 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 á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 de 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 upcasting) 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 o comportamento específico do círculo aqui:
    • draw_circle — imprime "Drawing Circle with radius: %.2f\n" (raio exibido com 2 casas decimais)
    • area_circle — retorna π × raio² (use 3.14159 para π)
    • create_circle — inicializa um Circle, conecta os ponteiros de função do Shape incorporado para apontar 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 seu construtor e, em seguida, chame tanto draw quanto area através dos ponteiros de função do Shape incorporado. Imprima a área com 2 casas decimais.

Seu programa receberá uma entrada: um valor de radius (como um 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 um Shape como seu primeiro membro, então você pode acessar os ponteiros de função através de circle.base.draw e circle.base.area (ou qualquer nome que você der ao membro incorporado). Ao chamar essas funções, passe um ponteiro para o membro Shape. Lembre-se de usar include guards 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: Criar um Círculo usando create_circle
    
    // TODO: Chamar draw através do ponteiro de função da Shape incorporada
    
    // TODO: Chamar area através do ponteiro de função da Shape incorporada
    // e imprimir com 2 casas decimais: "Area: %.2f\n"
    
    return 0;
}

Todas as lições de Object Oriented Programming