Sol 0 Posted June 5, 2019 Report Share Posted June 5, 2019 (edited) Olá, boa noite! Por favor estou a precisar de uma ajuda. Estou com dúvida em como relacionar as classes Ponto e Rectangulo de modo a calcular a area. O resultado esta sempre a dar zero. Quem puder ajudar por favor. Tentei de algumas formas mas estou a ter dificuldades nessa parte da cadeira. Agradeço qq ajuda! #pragma once class Ponto { private: int x, y; // coordenadas do ponto public: Ponto(); // construtor por omissão Ponto(int x0, int y0); //construtor para atribuição void AtribuirXY(int novo_x, int novo_y); // novas coordenadas float ObterDistancia(Ponto p2); // calcula a distancia a um ponto p2 int ObterX() { return x; }; // devolve a coordenada x int ObterY() { return y; } // devolve a coordenada y }; #pragma once #include "Ponto.h" class Rectangulo { private: Ponto top_left, bottom_right; // Cantos do rectângulo public: Rectangulo(Ponto tl, Ponto br); Rectangulo(int x1, int y1, int x2, int y2); bool Contem(Ponto p); // Verifica se o ponto p está contido no rectangulo // corrente bool Contem(Rectangulo r); // Verifica se o rectângulo r está contido no // rectangulo corrente double ObterArea(); }; #include "Rectangulo.h" #include "Ponto.h" #include <stdio.h> Rectangulo::Rectangulo(Ponto tl, Ponto br) { tl.AtribuirXY(top_left.ObterX(), top_left.ObterY()); br.AtribuirXY(bottom_right.ObterX(), bottom_right.ObterY()); } Rectangulo::Rectangulo(int x1, int y1, int x2, int y2) { Ponto(x1,y1); Ponto(x2,y2); } bool Rectangulo::Contem(Ponto p) { return 1; } bool Rectangulo::Contem(Rectangulo r) { return 1; } double Rectangulo::ObterArea() { double area; area = (bottom_right.ObterX() - top_left.ObterX()) * (bottom_right.ObterY() - top_left.ObterY()); return area; } #include <stdio.h> #include "Rectangulo.h" #include "Ponto.h" int main() { printf("Programa que utiliza outra janela para os resultados.\n"); Rectangulo r(242, 177, 892, 377); printf("\nArea do rectangulo: %0.2f\n", r.ObterArea()); } Edited June 5, 2019 by Sol Falta dados Link to post Share on other sites
bsccara 27 Posted June 6, 2019 Report Share Posted June 6, 2019 Tu estás a usar o constructor que recebe quatro ints para criar a instância 'r'. Esse constructor cria duas instâncias da classe Ponto, usando os parametros passados, mas não as atribui aos membros 'top_left' e 'bottom_right'. Assim esses membros são inicializados implicitamente usando o constructor por defeito da classe Ponto, sendo inicializados a (0,0). Link to post Share on other sites
Sol 0 Posted June 6, 2019 Author Report Share Posted June 6, 2019 2 horas atrás, bsccara disse: Tu estás a usar o constructor que recebe quatro ints para criar a instância 'r'. Esse constructor cria duas instâncias da classe Ponto, usando os parametros passados, mas não as atribui aos membros 'top_left' e 'bottom_right'. Assim esses membros são inicializados implicitamente usando o constructor por defeito da classe Ponto, sendo inicializados a (0,0). Entao, eu até percebi que estou a fazer isso. Mas como atribuir os parametros entao por favor? Fiz de varias formas e sem sucesso? Link to post Share on other sites
bsccara 27 Posted June 6, 2019 Report Share Posted June 6, 2019 Podes usar uma lista de inicialização de membros no constructor, alterando-o para: Rectangulo(int x1, int y1, int x2, int y2) : top_left(x1,y1), bottom_right(x2,y2) {} Link to post Share on other sites
Sol 0 Posted June 6, 2019 Author Report Share Posted June 6, 2019 6 horas atrás, bsccara disse: Podes usar uma lista de inicialização de membros no constructor, alterando-o para: Rectangulo(int x1, int y1, int x2, int y2) : top_left(x1,y1), bottom_right(x2,y2) {} Boa! Já percebi. Obrigada! Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now