Você está na página 1de 2

Algoritmos e Estruturas de Dados 2015/16

MIEIC 2ano

2aula prtica - Herana e subclasses. Polimorfismo

Faa download do ficheiro aeda1516_fp02.zip da pgina da disciplina e descomprima-o (contm os ficheiros


Frota.h, Frota.cpp e Test.cpp)

Enunciado
Pretende-se guardar e manipular informao sobre uma frota de veculos, usando a classe Frota.
class Frota {
vector<Veiculo *> veiculos;
public:
...
};

Considere ainda a existncia das classes Veiculo, Motorizado, Automovel, Camiao e Bicicleta.
class Veiculo {

class Automovel: public Motorizado {

protected:

public:

string marca;
int mes, ano;
public:

};
class Camiao: public Motorizado {

virtual float calcImposto() const = 0;

int carga_maxima;
public:

};
class Motorizado: public Veiculo {
string combustivel; int cilindrada;
public:

};
class Bicicleta: public Veiculo {
string tipo;

public:

};
};

A declarao das classes deve ser efectuada no ficheiro Frota.h e a definio dos seus membros-funo no
ficheiro Frota.cpp.

a) Implemente os construtores das classes Veiculo, Motorizado, Automovel, Camiao e Bicicleta, que
inicializam todos os membros-dado da classe. Implemente, nas classes adequadas, os membrosfuno:
string getCombustivel() const
string getMarca() const
que retornam o combustvel e a marca, respetivamente, do veculo em questo.

b) Implemente, para cada uma das classes Veiculo, Motorizado, Automovel, Camiao e Bicicleta, o
membro-funo:
int info() const;
que retona o nmero de membros-dado e imprime no monitor o valor destes. Algum(ns) destes
membros-funo deve ser declarado como virtual?

pg.1

Algoritmos e Estruturas de Dados 2015/16

MIEIC 2ano

c) Implemente, para cada uma das classes Veiculo, Motorizado, Automovel, Camiao e Bicicleta, o
membro-funo:
float calcImposto() const;
Esta funo retorna o valor do imposto a pagar pelo veculo respetivo. Algum(ns) destes membrofuno deve ser declarado como virtual?
S os veculos motorizados

combustivel

pagam imposto, cujo valor

ano

gasolina

outro

>1995

<=1995

cil <=1000

cil <=1500

14,56

8,10

1000<cil<=1300

1500<cil<=2000

29,06

14,56

1300<cil<=1750

2000<cil<=3000

45,15

22,65

1750<cil<=2600

cil>3000

113,98

54,89

2600<cil<=3500

181,17

87,13

cil>3500

320,89

148,37

dado pela tabela:

d) Implemente o membro-funo:
bool operator < (const Veiculo & v) const;
Um veculo menor que outro se mais antigo (verificar ano e ms de fabrico).

e) Implemente o membro-funo:
void Frota::adicionaVeiculo(Veiculo *v1);
Esta funo adiciona um veculo v1 (automvel, camio ou bicicleta) ao vetor veiculos.
Implemente ainda os membros-funo:
int Frota::numVeiculos() const;

// retorna o n de veculos no vector veiculos

int Frota::menorAno() const; // retorna o menor ano dos veculos presentes no vetor veculos;
// retorna 0 se no existir nenhum veculo

f) Implemente o membro-funo:
float Frota::totalImposto() const;
Esta funo retorna a soma do valor do imposto a pagar pelos veculos presentes no vetor veiculos.
(nota: se no usou mtodos virtuais na alnea c) reconsidere agora essa questo)

g) Implemente o membro-funo:
void Frota::info() const;
Esta funo imprime no monitor o valor dos atributos de todos os veculos presentes no vetor
veiculos. Note que este teste no falha. Deve validar este teste pela verificao da escrita correta da
informao relativa aos atributos de cada veculo.
Nota: se no usou mtodos virtuais na alnea b) reconsidere agora essa questo

pg.2