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.
Desafio
FácilVamos 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 baseShapecom os tipos de ponteiro para funçãoDrawFunceAreaFuncdas lições anteriores.circle.hecircle.c: mantenha a implementação de Circle da lição anterior.rectangle.h: defina sua structRectangleaqui. Um retângulo incorporaShapecomo seu primeiro membro e adiciona os camposwidtheheight(ambos do tipodouble). Declare uma função construtoracreate_rectangleque recebe parâmetros de largura e altura e retorna umRectanglepor valor.rectangle.c: implemente o comportamento específico do retângulo:draw_rectangle: imprimeDrawing Rectangle with width: X.XX and height: X.XX(ambos os valores exibidos com 2 casas decimais)area_rectangle: retorna largura × alturacreate_rectangle: inicializa umRectangle, conecta os ponteiros para função doShapeincorporado à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, chamedraweareapor meio dos ponteiros para função doShapeincorporado. 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.00Exemplo 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.75Assim 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
1Fundamentos da Programação Modular
Arquivos de cabeçalhoProteções de inclusãoArquivos-fonteFunções estáticasRevisão: calculadora modular4Encapsulamento
Conceito de ponteiros opacosDefinindo structs opacasGetters e settersValidação em settersRevisão: caixa secreta2Objetos e métodos
Structs como objetosO ponteiro 'Self'Correção de constPonteiro vs. valorMétodos auxiliaresRevisão: Gerenciador de pontos5Projeto: Conta Bancária Simples
Configuração do ProjetoImplementação da Conta3Ciclo de vida do objeto
Padrão de construtorPadrão de destrutorInicialização da pilhaCópia profundaRevisão: wrapper de String6Herança por composição
Incorporação de structRegra do primeiro membroAcessando membros do tipo paiUpcastingRevisão: hierarquia de formas9Projeto: Desenhador de Formas
Visão geral do projetoImplementação do círculoImplementação do retânguloUso polimórficoContêiner de formasPratique por conta própria: Compilador de C online