Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Toda a resolução não é única e pode não ser, digamos o mais eficiente/efetivo, por isso não pensem que com isto tirariam 20 pois eu próprio dúvido
- //1
- //Polimorfismo é usar usar uma class base numa outra class, por exemplo criar uma class Linha com a class ponto por base.
- //Isto faz com que a "nova" class tenha um ponteiro para a class base, ou seja, essa class pode aceder às variaveis/funçoes da class base que não sejam "private" ("public"/"protected")
- //deste modo pode-se criar variáveis e/ou funções gerais para todas as classes que tenham por base uma outra class, e usar as cariáveis comums.
- //NOTA: Basicamente fiz copy paste da resposta que pus na resolução das frequencias dos outros anos, não tenho a certeza se é isto para pôr, por isso sugiro vivamente a estudarem isto a partir dos pdfs do moodle ou no google.
- //2 - as respostas podem nao estar a 100% estudem os pdfs do moodle ou pesquisem no google
- //privado : um atributo privado previne que este seja acedido diretamente fora da classe, ou seja só pode ser acedido por funçoes dentro da class, util para variáveis importantes e que nao sao alteradas muitas vezes
- //publico : um atributo público pode ser acedido diretamente fora da classe sem restrções, util para funções
- //protegido : um atributo protegido pode ser acedido diretamente por classes que usam esta como class base, mas nao fora destas classes, util para usar em variaveis que possao ser alteradas por classes que usem a class onde esta foi criada como base, protegendo na mesma que seja acedida fora de uma dessas classes
- //3
- //Originalmente tinha a class veiculos como base da class clientes, mas depois apercebi-me que era mais fácil estarem em separado, porque assim os clientes podem ter uma lista de veiculos
- //No entanto esta treta do polimorfismo anda-me a fuder a cabeça porque supostamente tu só consegues aceder de baixo para cima e nao de cima para baixo, ou seja se criares uma lista de veiculos nao consegues aceder a um carro por exemplo, mas se criares uma lista de carros podes aceder ao veiculo que for...
- //por isso nao sei se a 3 e a 4 estão corretas, no entantofoi a unica maneira que consegui pensar que desse para resolver todas as perguntas na 5, visto que a 5 está diretamente relacionada com a 3 e 4
- //http://i.imgur.com/HO4Tore.jpg
- //4
- class Veiculo
- {
- protected:
- string matricula,
- codigo,
- tipo;
- float preco;
- public:
- Veiculo()
- {
- matricula ="";
- codigo = "";
- preco = 0.0;
- tipo = "";
- }
- ~Veiculo();
- };
- class Motas:
- public Veiculo
- {
- public:
- Motas()
- {
- tipo = "Mota";
- }
- ~Motas();
- };
- class Carro:
- public Veiculo
- {
- public:
- Carro()
- {
- tipo = "Carro";
- }
- ~Carro();
- };
- class Gestor
- {
- Lista<Veiculo> *LV;
- Lista<Cliente> *LC;
- public:
- Gestor()
- {
- LV = NULL;
- LC = NULL;
- }
- ~Gestor();
- Lista<string> *ListarTipo(string);
- bool Pertence(string);
- Lista<Veiculo> *VeiculosPrecoInferior(float pmin);
- void RemoverClientesInstitucionais();
- void Add(int cod, string nome, int tipo);
- void RegistarCompra(int id_cliente, Veiculo *V);
- Lista<Veiculo> *DevolveVeiculosCliente(int id_cliente);
- };
- //5
- //5.1
- Lista<string> *Gestor::ListarTipo(string tipo)
- {
- NO<Veiculo> *N = LV->Inicio();
- Lista<string> *LS = new Lista<string>();
- while(N)
- {
- if(N->GetInfo()->GetTipo() == tipo)
- LS->Add(N->GetInfo()->GetMatricula());
- N = N->Avancar();
- }
- return LS;
- }
- //5.2
- bool Gestor::Pertence(string matricula)
- {
- NO<Veiculo> *N = LV->Inicio();
- while(N)
- {
- if(N->GetInfo()->GetMatricula() == matricula)
- return true;
- N = N->Avancar();
- }
- return false;
- }
- //5.3
- Lista<Veiculo> *Gestor::VeiculosPrecoInferior(float pmin)
- {
- Lista<Veiculo> *LVC = new Lista<Veiculo>();
- NO<Veiculo> *N = LV->Inicio();
- while(N)
- {
- if(N->GetInfo()->GetPreco() < pmin)
- LVC->Add(N->GetInfo());
- N = N->Avancar();
- }
- return LVC;
- }
- //5.4
- void Gestor::RemoverClientesInstitucionais()
- {
- NO<Cliente> *N = LC->Inicio(), *Aux = NULL;
- while(N)
- {
- if(N->GetInfo()->GetTipo() != 3) //send 3 o tipo instituiconal
- {
- Aux = N;
- N=N->Avancar();
- continue;
- }
- if(!Aux) //Se For No Inicio Da Lista
- {
- LC->SetInicio(N->Avancar());
- delete N;
- N = LC->Inicio();
- continue;
- }//else
- Aux->SetProx(N->Avancar());
- delete N;
- N = Aux->Avancar();
- }
- }
- //5.5
- Veiculo *VeiculoMaisCaro()
- {
- Veiculo *vc = NULL;
- float max=0;
- NO<Veiculo> *N = LV->Inicio();
- while(N)
- {
- if(N->GetInfo()->GetPreco() > max)
- {
- vc = N->GetInfo();
- max = N->GetInfo()->GetPreco();
- }
- N = N->Avancar();
- }
- return vc;
- }
- //5.6 Adiciona no fim
- void Gestor::Add(int cod, string nome, int tipo)
- {
- Cliente *C = new Cliente(cod, nome, tipo);
- NO<Cliente> *N = LC->Inicio(), *Novo = new NO<Cliente>(C);
- while(N->Acancar())
- N = Aux->Avancar();
- N->SetProx(Novo);
- }
- //5.6 Adiciona no inicio
- void Gestor::Add(int cod, string nome, int tipo)
- {
- Cliente *C = new Cliente(cod, nome, tipo);
- NO<Cliente> *Aux = LC->Inicio(), *Novo = new NO<Cliente>(C);
- Novo->SetProx(Aux);
- LC->SetInicio(Novo);
- }
- //5.7
- void Gestor::RegistarCompra(int id_cliente, Veiculo *V)
- {
- NO<Cliente> *N = LC->Inicio();
- while(N)
- {
- if(N->GetInfo()->GetCod() == id_cliente)
- {
- Lista<Veiculo> *LVC = N->GetInfo()->GetVeiculos();
- NO<Veiculo> *NC = LVC->GetInicio(), *Aux = new NO<Veiculo>(V);
- Aux->SetProx(NC);
- LVC->SetInicio(Aux);
- return;
- }
- N = Aux->Avancar();
- }
- }
- //5.8 ??? so easy??? bah...
- Lista<Veiculo> *Gestor::DevolveVeiculosCliente(int id_cliente)
- {
- NO<Cliente> *N = LC->Inicio();
- while(N)
- {
- if(N->GetInfo()->GetCod() == id_cliente)
- return N->GetInfo()->GetVeiculos();
- N = Aux->Avancar();
- }
- }
- //6
- template <class T>
- class Lista
- {
- NO<T> *inicio;
- int Nel;
- NO<T> *last;
- int nl;
- public:
- T *operator[](int pos)
- {
- if(pos < nl)
- {
- nl=0;
- last = inicio;
- }
- int i=nl;
- while(i<pos && last) //enquanto o i nao for igual ao pos e o last existir
- {
- last = last->Avancar();
- i++;
- }
- nl=i;
- return last;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment