• Nenhum resultado encontrado

Exercícios Orientação a Objetos

N/A
N/A
Protected

Academic year: 2022

Share "Exercícios Orientação a Objetos"

Copied!
6
0
0

Texto

(1)

Exercícios Orientação a Objetos

1ª Questão

(a) Escreva uma classe em C++ chamada de Imovel com 4 atributos: uma string contendo o nome do proprietário, uma string contendo o endereço do imóvel, um número real representando o valor da compra e um inteiro não negativo representando o ano de construção do imóvel. Declare e implemente um construtor que receba como parâmetros:

o nome do proprietário, o endereço, o valor da compra e o ano de construção, e inicialize os respectivos atributos. Declare também um método chamado calcularValorVenda que recebe como parâmetros um inteiro não negativo que representa o ano de venda, e um número real que representa a taxa de correção monetária, e retorna um valor real.

(b) Implemente o método calcularValorVenda. O cálculo depende do ano de construção e o valor de compra original. Para calcular o valor de venda do imóvel, o método deve inicialmente aplicar a taxa de correção monetária sobre o valor de compra para cada ano de existência do imóvel (juros compostos); e posteriormente multiplicar este valor pelo fator de depreciação. O fator de depreciação é obtido subtraindo o tempo de construção do imóvel do número 30 e posteriormente dividindo este valor por 30 (Exemplo: ano de construção = 2000, ano de venda = 2010  fator de depreciação = 20⁄30)

Obs : Não pode utilizar a função pow da biblioteca math.h

(2)

2ª Questão

Considere que exista uma classe em C++ denominada Chamada que representa chamadas telefônicas. Esta classe possui um método implementado: int getDuracao() que retorna o número de minutos de uma chamada. Além disto, o construtor é dado por:

Chamada(int duracao);

(a) Escreva uma classe chamada de PlanoPrePago com 5 atributos: uma string contendo o nome do cliente, um inteiro que representa a quantidade de minutos máxima que o plano dá direito, um real que representa a franquia (o valor pré-pago), um inteiro que representa a quantidade de chamadas (este atributo deve ser protected), e um vetor de tamanho 30 de ponteiros para chamadas (o vetor deve ser protected). Declare um construtor que receba como parâmetros, o nome do cliente, quantidade máxima de minutos e o valor da franquia. Declare também um método chamado adicionarChamada que recebe um ponteiro para uma chamada e o tipo de retorno é void. Este método deve ser declarado como virtual. Declare e implemente um método chamado calcularFatura que retorna o valor da franquia. Declare e implemente um método getQuantidadeMinutos que não tem parâmetros e que retorna a quantidade máxima de minutos. Finalmente implemente o construtor que deve inicializar os atributos com os parâmetros passados, além de inicializar a quantidade de chamadas com 0.

(b) Implemente o método adicionarChamada que adiciona um ponteiro para uma chamada ao vetor de ponteiros declarado na classe. Este método só pode adicionar uma chamada se já não existir 30 chamadas no vetor e se a duração das chamadas existentes mais a que vai ser adicionada, não ultrapassar o total de minutos que o plano dá direito.

Caso não seja possível adicionar a chamada, o método deve imprimir uma mensagem de erro.

(3)

3ª Questão

(a) Escreva uma classe chamada de PlanoPosPago que herde da classe PlanoPrePago e que tenha 1 atributo além dos herdados: um real que representa a tarifa cobrada por minuto adicional de chamada (ou seja fora da quantidade máxima garantida pelo plano). Declare e implemente um construtor que receba os mesmos parâmetros de PlanoPrePago, acrescido do parâmetro tarifa por minuto. Declare também os métodos adicionarChamada e calcularFatura que são redefinições dos métodos homônimos de PlanoPrePago.

(b) Implemente o método adicionarChamada. Este método deve adicionar um ponteiro para uma chamada ao vetor de ponteiros apenas verificando se o total de chamadas não ultrapassa 30. Caso não seja possível adicionar a chamada, o método deve imprimir uma mensagem de erro.

(c) Implemente o método calcularFatura. A fatura é calculada multiplicando os minutos adicionais (fora da quantidade garantida pelo plano) pela tarifa cobrada por cada minuto adicional e depois somando com a franquia.

Soluções

1ª Questão

#include <string>

using namespace std;

class Imovel {

private:

string proprietario;

string endereco;

double valorCompra;

unsigned ano;

public:

Imovel(string nome, string endereco, double valor, unsigned ano);

double calcularVenda(unsigned anoVenda, double correcao);

};

#include "Imovel.h"

Imovel::Imovel(string nome, string endereco, double valor, unsigned ano) {

this->proprietario = nome;

this->endereco = endereco;

this->valorCompra = valor;

(4)

this->ano = ano;

}

double Imovel::calcularVenda(unsigned anoVenda, double correcao) { int i,tempoConstrucao = anoVenda – this->ano;

double valorFinal;

double jurosCompostos = 1;

for (i = 0; i < tempoConstrucao; i++) {

jurosCompostos = jurosCompostos * (1+correcao);

}

valorFinal = this->valorCompra * jurosCompostos * (30-tempoConstrucao)/30;

return valorFinal;

}

2ª Questão

#include "Chamada.h"

#include <string>

using namespace std;

class PlanoPrePago {

private:

string nomeCliente;

int quantidadeMinutos;

double franquia;

protected:

Chamada* chamadas[30];

int quantidadeChamadas;

public:

PlanoPrePago(string nome,int minutos, double valor);

int getQuantidadeMinutos();

double calcularFatura();

virtual void adicionarChamada(Chamada* chamada);

};

PlanoPrePago::PlanoPrePago(string nome,int minutos, double valor) {

nomeCliente = nome;

quantidadeMinutos = minutos;

franquia = valor;

quantidadeChamadas = 0;

}

int PlanoPrePago::getQuantidadeMinutos() { return quantidadeMinutos;

}

int PlanoPrePago::getQuantidadeChamadas() { return quantidadeChamadas;

}

(5)

double PlanoPrePago::calcularFatura() { return franquia;

}

void PlanoPrePago::adicionarChamada(Chamada* chamada){

if (quantidadeChamadas < 30) { int i,duracaoChamadas = 0;

for (i = 0; i < quantidadeChamadas; i++){

duracaoChamadas += chamadas[i]->getDuracao();

}

if (duracaoChamadas + chamada->getDuracao() <=

quantidadeMinutos){

chamadas[quantidadeChamadas] = chamada;

quantidadeChamadas++;

} else {

cout << "Nao eh possivel fazer a chamada"<<endl;

} } else {

cout << "Nao eh possivel fazer a chamada"<<endl;

} }

3ª Questão

#include "PlanoPrePago.h"

class PlanoPosPago: public PlanoPrePago { private:

double tarifaMinuto;

public:

void adicionarChamada(Chamada* chamada);

double calcularFatura();

PlanoPosPago(string nome,int maximo,double franquia, double adicional):

PlanoPrePago(nome,maximo,franquia) {tarifaMinuto = adicional;}

};

#include "PlanoPosPago.h"

#include <iostream>

void PlanoPosPago::adicionarChamada(Chamada* chamada){

if (quantidadeChamadas < 30) {

chamadas[quantidadeChamadas] = chamada;

quantidadeChamadas++;

} else {

cout << "Nao eh possivel fazer a chamada"<<endl;

} }

double PlanoPosPago::calcularFatura() {

(6)

int duracao = getQuantidadeMinutos();

int i,minutosAdicionais,duracaoChamadas = 0;

double tarifa = PlanoPrePago::calcularFatura();

for (i = 0; i < quantidadeChamadas; i++){

duracaoChamadas += chamadas[i]->getDuracao();

}

if (duracao < duracaoChamadas){

minutosAdicionais = duracaoChamadas - duracao;

tarifa += minutosAdicionais * tarifaMinuto;

}

return tarifa;

}

Referências

Documentos relacionados

5 “A Teoria Pura do Direito é uma teoria do Direito positivo – do Direito positivo em geral, não de uma ordem jurídica especial” (KELSEN, Teoria pura do direito, p..

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

nesta nossa modesta obra O sonho e os sonhos analisa- mos o sono e sua importância para o corpo e sobretudo para a alma que, nas horas de repouso da matéria, liberta-se parcialmente

Apesar dos esforços para reduzir os níveis de emissão de poluentes ao longo das últimas décadas na região da cidade de Cubatão, as concentrações dos poluentes

Assim procedemos a fim de clarear certas reflexões e buscar possíveis respostas ou, quem sabe, novas pistas que poderão configurar outros objetos de estudo, a exemplo de: *

Considerando que, no Brasil, o teste de FC é realizado com antígenos importados c.c.pro - Alemanha e USDA - USA e que recentemente foi desenvolvido um antígeno nacional

By interpreting equations of Table 1, it is possible to see that the EM radiation process involves a periodic chain reaction where originally a time variant conduction

O desenvolvimento desta pesquisa está alicerçado ao método Dialético Crítico fundamentado no Materialismo Histórico, que segundo Triviños (1987)permite que se aproxime de