Menu
Coddy logo textTech

Implementação do Retângulo

Parte da seção Object Oriented Programming do Journey de C da Coddy — lição 46 de 61.

challenge icon

Desafio

Fácil

Vamos continuar construindo o projeto Shape Drawer implementando o Rectangle — outra forma concreta que incorpora a struct base Shape, assim como fizemos com o Circle.

Com base no seu projeto existente, você adicionará a funcionalidade de retângulo nestes arquivos:

  • shape.h: Mantenha sua interface base Shape com os tipos de ponteiro de função DrawFunc e AreaFunc das lições anteriores.
  • circle.h e circle.c: Mantenha sua implementação de Circle da lição anterior.
  • rectangle.h: Defina sua struct Rectangle aqui. Um retângulo incorpora Shape como seu primeiro membro e adiciona os campos width e height (ambos double). Declare uma função construtora create_rectangle que recebe os parâmetros width e height e retorna um Rectangle por valor.
  • rectangle.c: Implemente o comportamento específico do retângulo:
    • draw_rectangle — imprime Drawing Rectangle with width: X.XX and height: X.XX (ambos os valores exibidos com 2 casas decimais)
    • area_rectangle — retorna width × height
    • create_rectangle — inicializa um Rectangle, conecta os ponteiros de função do Shape incorporado às funções do retângulo, define as dimensões e retorna o retângulo
  • main.c: Demonstre ambas as formas funcionando através da mesma interface. Leia duas entradas: largura (width) e altura (height) para um retângulo. Crie um retângulo 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á duas entradas: valores de width e height (como números de ponto flutuante).

Exemplo de saída quando as entradas são 4.0 e 3.0:

Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00

Exemplo de saída quando as entradas são 7.5 e 2.5:

Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75

Assim como no Circle, o Rectangle incorpora o Shape como seu primeiro membro, permitindo que você acesse os ponteiros de função através do membro incorporado. Esse padrão consistente é o que permite o polimorfismo — ambas as formas podem ser tratadas uniformemente através de sua interface Shape. Lembre-se de usar include guards em todos os arquivos de cabeçalho.

Experimente você mesmo

#include <stdio.h>
#include "shape.h"
#include "rectangle.h"

int main() {
    double width, height;
    scanf("%lf", &width);
    scanf("%lf", &height);
    
    // TODO: Criar um retângulo usando create_rectangle(width, height)
    
    // 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
    // TODO: Imprimir a área com 2 casas decimais: "Area: %.2f\n"
    
    return 0;
}

Todas as lições de Object Oriented Programming