Implementação do Círculo
Parte da seção Object Oriented Programming do Journey de C da Coddy — lição 45 de 61.
Desafio
FácilVamos 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 baseShapeda lição anterior com os tipos de ponteiro de funçãoDrawFunceAreaFunc.circle.h: Defina sua structCircleaqui. Um círculo incorporaShapecomo seu primeiro membro (permitindo a regra do primeiro membro para upcasting) e adiciona um camporadiusdo tipodouble. Declare uma função construtoracreate_circleque recebe um raio e retorna umCirclepor 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² (use3.14159para π)create_circle— inicializa umCircle, conecta os ponteiros de função doShapeincorporado para apontar paradraw_circleearea_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 tantodrawquantoareaatravés dos ponteiros de função doShapeincorporado. 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.54Exemplo de saída quando a entrada é 3.5:
Drawing Circle with radius: 3.50
Area: 38.48A 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
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 Conta3Ciclo 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írculo