Menu
Coddy logo textTech

Implementação do Retângulo

Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 46 de 61.

challenge icon

Desafio

Fácil

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

Com base no seu projeto existente, você adicionará a funcionalidade de retângulo aos seguintes 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 parâmetros de largura e altura 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 largura × altura
    • create_rectangle: inicializa um Rectangle, configura os ponteiros de função da Shape incorporada para apontarem para as funções do retângulo, define as dimensões e retorna o retângulo
  • main.c: Demonstre ambas as formas funcionando por meio da mesma interface. Leia duas entradas: largura e altura de um retângulo. Crie um retângulo usando sua função construtora e, em seguida, chame draw e area por meio dos ponteiros de função da Shape incorporada. Imprima a área com 2 casas decimais.

Seu programa receberá duas entradas: valores de width e height (como números de ponto flutuante).

Saída de exemplo quando as entradas são 4.0 e 3.0:

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

Saída de exemplo 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 acontece com Circle, o Rectangle incorpora Shape como seu primeiro membro, permitindo acessar os ponteiros de função por meio do membro incorporado. Esse padrão consistente é o que possibilita o polimorfismo: ambas as formas podem ser tratadas uniformemente por meio de sua interface 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 "rectangle.h"

int main() {
    double width, height;
    scanf("%lf", &width);
    scanf("%lf", &height);
    
    // TODO: Crie um retângulo usando create_rectangle(width, height)
    
    // 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
    // TODO: Imprima a área 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