Nome do aluno: _______________________________________________
Número do aluno: ______________________
Assinatura do docente: ________________________________________
Identificação
Nome do aluno: _______________________________________________Número do aluno: ______________________
Turma: ____________
Frequência
Programação Orientada para Objectos
IGE e ETI
2º semestre de 1999/2000
ISCTE
Deve preencher todos os espaços indicados por um sublinhado ( ) com V ou F. Qualquer espaço não preenchido será considerado como uma resposta errada.
As alíneas podem ter zero ou mais respostas correctas. Cada resposta correctamente assinalada vale 0,5 valores.
Em todos os casos em que não é explicitamente referida a localização de uma instrução, considere que esta é dada na função main() do programa seguinte:
#include <iostream>using namespace std;
class A {
public:
A(int a) : a(a) {}
virtual void g() const = 0;private:
int a;
};class B : public A {
public:
int bx;
B(int, int); // Não há construtor por omissão!
void g() const {
std::cout << "Execução de B::g(). ";
}private:
void f() const {
std::cout << "Execução de B::f(). ";
}
};class C : public B {
public:
C(int);
void h();private:
int c;
};
...
int main()
{
...
}
__ A a(2);
__ B b(2);
__ B* b = new B(2, 3);
[1,5 valores]
__ C::C(int aa) { B(1, 2); }
__ void C::h() {g(); std::cout<< "Executei
g()";}
__ void C::h() {f(); std::cout<< "Executei
B::f()";}
[1,5 valores]
int i = 1;quais das seguintes instruções estão correctas?
double d = 2.0;
__ int** pi = &i;
__ int& ri = &i;
__ int* pi = &d;
__ int* pi = 2;
[2 valores]
class GestorDeAlojamentos {Pretende-se implementar em C++ uma aplicação para apoio ao serviço de gestão de alojamentos num empreendimento turístico. Entre outras características este sistema deve disponibilizar informação precisa sobre cada alojamento. Essa informação deve conter: código do alojamento, categoria (primeira, segunda e terceira), indicação acerca do estado do alojamento (ocupado ou não) e, caso esteja ocupado, por quantos dias no total.
public:
GestorDeAlojamento();
bool ocupa(int código, int número_de_dias, int número_de_pessoas);
void liberta(int código);
void mostraLivres() const;
void mostra(int código) const;
int conta(int código) const; // em $.private:
list<Alojamento*> alojamentos;
// ou ListaPonteiroAlojamento alojamentos;, se estiver mais à vontade com estas listas,
// ou mesmo Lista<Alojamento*> alojamentos;.
};
Existem dois tipos concretos de alojamento, o quarto e o apartamento:
Devem-se poder invocar métodos que permitam libertar um alojamento, calcular a conta e mostrar no ecrã a informação sobre o alojamento.
Não é necessário nesta alínea implementar qualquer um dos métodos das classes definidas.
[5 valores]
Código do alojamento: 4Implemente o método void Apartamento::mostra() const, que mostre no ecrã toda a informação relativa a este apartamento no seguinte formato:
1ª categoria
Ocupado
Tipo de alojamento: Apartamento[2 valores]
Código do alojamento: 4
1ª categoria
Ocupado
Utiliza cozinha: Não
Assuma que os restantes métodos das classes Alojamento , Quarto e Apartamento já estão definidos.
[3 valores]
class Matriz {[3 valores]
public:
typedef Elemento double;
typedef int;Matriz(int tamanho);
...
int tamanho();
...
Elemento const& operator [] (int i) const;
...// Defina aqui a classe para representar excepções de indexação inválida:
private:
Elemento* elementos; // matriz dinâmica...
int número_de_elementos;
};// Os índices válidos da matriz situam-se entre 0 e tamanho() - 1.
inline Matriz::Elemento const& Matriz::operator [] (int i) const {
// Coloque aqui o seu código:return elementos[i];
}
class A {indique qual a sequência de acontecimentos quando são executadas as seguintes instruções:
public:
A(int x, int y)
: a(new int(x)), b(y) {
}
~A() {
delete a;
}
...
private:
int* a;
int b;
};
A* aa = new A(4, 5); // linha 1Indique claramente a ordem dos acontecimentos. Distinga entre reserva de memória e construção (inicialização) das variáveis.
... // linha 2
delete aa; // linha 3
[2 valores]