Menu
CoddyTech

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 Rectangle: outra forma concreta que incorpora a struct base Shape, assim como fizemos com Circle.

Com base no projeto que você já tem, você adicionará a funcionalidade de retângulo nestes arquivos:

  • shape.h: mantenha a interface base Shape com os tipos de ponteiro para função DrawFunc e AreaFunc das lições anteriores.
  • circle.h e circle.c: mantenha a 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 do tipo 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, conecta os ponteiros para função do Shape incorporado às funções do retângulo, define as dimensões e retorna o retângulo
  • main.c: demonstre o funcionamento das duas formas 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 para 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 acontece com Circle, Rectangle incorpora Shape como seu primeiro membro, permitindo acessar os ponteiros para função por meio do membro incorporado. Esse padrão consistente é o que possibilita o polimorfismo: as duas 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 por meio do ponteiro de função da Shape incorporada
    
    // TODO: Chame area por meio do ponteiro de função da Shape incorporada
    // 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