Exercícios Resolvidos de Construtores

Ver Teoria

Enunciado

Defina uma classe que representa um círculo com métodos privados que calcula a área, a distância entre os centros de dois círculos, e a circunferência do círculo.

O círculo deve ser iniciado no momento que for instanciado por um conjunto de construtores:

Passo 1

E aí pessoal, vamos lá?!

Essa é claramente uma questão de sobrecarga de construtor!

A questão está pedindo pra gente criar uma classe que possui três métodos privados e um construtor com 3 sobrecargas.

Vamos começar desenvolvendo o cabeçalho da questão. Nessa questão vamos precisar calcular áreas, distancias e perímetros, então vamos incluir o cabeçalho < c m a t h > pra auxiliar a gente.

Passo 2

Então vamos começar declarando a classe C i r c u l o

Vamos precisar declarar três atributos: x e y para representar a posição central, e o r a i o para representar o raio do círculo. Além disso, ao longo dos métodos vamos precisar do valor de π , então vamos declarar uma constante com o valor.

Depois vamos precisar declarar métodos privados que calcula a área do círculo, calcular a distância entre os centros de dois círculos, e a circunferência do círculo. Vamos declarar então três métodos: a r e a , d i s t a n c i a e c i r c u n f e r e n c i a . Por enquanto vamos apenas declarar os protótipos dos métodos, a gente vai desenvolver eles depois.

Continuando a nossa classe, vamos desenvolver os construtores. Lembre-se os construtores são sempre públicos (com raras exceções). Então vamos mudar para p u b l i c e criar o construtor.

Nessa questão, temos sobrecarga de construtores então vamos declarar todas as sobrecargas do nosso construtor. A primeira versão não recebe nenhum parâmetro

A segunda versão do construtor irá receber o valor do raio:

A terceira versão recebe o valor da posição x e y

E a última versão do construtor recebe os três parâmetros:

Está quase tudo pronto, mas tem um pequeno detalhe. Todos os atributos e métodos interessantes são privados! Precisamos criar um método público que imprima as informações dessa classe. Então vamos criar o método i m p r i m i r :

E agora sim a gente pode fechar a classe.

Passo 3

Dentro da classe a gente declarou o protótipo dos métodos, agora a gente precisa desenvolver o conteúdo desses métodos. Para desenvolver um método fora da classe a gente chama o método usando e dentro das chaves escreve o conteúdo do método.

t i p o   N o m e C l a s s e ∷ N o m e M e t o d o     p a r a m e t r o s   {   c o n t e u d o   }

Primeiro, vamos começar pelo método a r e a ( ) . Ele é bem simples, não precisa receber nenhum parâmetro. Apenas vai acessar o atributo r a i o e aplicar a fórmula da área do círculo:

a r e a = π ⋅ r a i o 2

Depois vamos desenvolver o método d i s t a n c i a . Esse método é interessante por recebe um outro objeto da classe C i r c u l o ! Dentro desse método, a gente calcula a distancia entre as componentes do círculo, e depois calcula o módulo dessa distância, e retorna esse resultado:

Δ x = x r e c e b i d o - x d a C l a s s e

Δ y = y r e c e b i d o - y d a C l a s s e

d i s t a n c i a = Δ x 2 + Δ y 2

No código fica assim:

O próximo método que vamos desenvolver é o c i r c u n f e r e n c i a que calcula o comprimento da circunferência usando a seguinte fórmula:

2 π ⋅ r a i o

E já vamos aproveitar para desenvolver o método i m p r i m i r também. É só usar o c o u t várias vezes para imprimir os atributos e métodos da classe:

Passo 4

Agora vamos desenvolver os construtores. Vamos lembrar que um construtor é um método sem tipo e que não retorna nada. Na maioria das vezes esse método é usado apenas para inicializar os atributos da classe, e é exatamente isso que faremos aqui.

Para evitar confusão entre os nomes dos parâmetros e dos atributos, vamos usar o ponteiro t h i s quando a gente quiser se referir aos atributos da classe.

O primeiro construtor não recebe nenhum parâmetro, e inicializa os atributos com valores padronizados.

O segundo construtor recebe o valor do raio, e inicializar os atributos:

O construtor três recebe os parâmetros x e y :

E o último construtor recebe o valor de todos os parâmetros da classe:

E prontinho! Desenvolvemos todas as sobrecargas do construtor, e a classe está terminada!

Passo 5

Pra terminar a questão, precisamos testar o nosso código!

Vamos criar quatro instâncias da classe círculo, e em cada uma delas a gente vai utilizar uma construtor diferente!

E depois, em cada instância vamos utilizar o método i m p r i m i r :

E aí termos o seguinte resultado:

Resposta