Recibo, 2ª frequência, 1ºsemestre, 1998/99, Programação I :
Nome: _______________________________________________
Nº ______________________
Ass. Docente: ________________________________________
Identificação
Nome: _______________________________________________
Nº ________________
Turma: ____________
ISCTE - IGE
Programação I
2ª Frequência
1998/1999, 1º semestre
Notas:
Assinale com V (Verdadeiro) as expressões que estão correctas e com F (Falso) as que estão incorrectas.
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.
Qualquer alínea pode 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 { private: int x; int y; public: A(int a, int b = 0); int f1(); int f2(int); bool f3(); }; int main() { int i = 1, j = 2; ... }
a) Quais das seguintes definições estão correctas?
__ A a = A(3); __ A a; __ A a(1); __ A a(i,j);
[cotação: 2]
b) Assuma que está correctamente declarada e definida uma variável
a da classe A . Quais da seguintes instruções estão correctas?__ a.x = 1;
__ if(A.f3()) cout << "bla bla";
__ int z = a.f2();
[cotação: 1.5]
c) Assuma que as seguintes instruções são dadas dentro de uma função membro da classe
A e que não são declaradas quaisquer variáveis dentro dessa função. Quais das seguintes instruções estão correctas?__ a.x = 1; __ A.x = 1; __ x = 1;
[cotação: 1.5]
Questão 2
2.a) Declare uma classe
Conjunto que possa guardar um máximo de 100 valores inteiros diferentes. Não é necessário nesta alínea definir qualquer um dos métodos.Devem existir métodos para :
Deve também se declarada a sobrecarga do operador
+=. Este operador insere todos os elementos do conjunto dado como segundo operando no conjunto dado como primeiro operando (i.e., aquele que executa a operação). Deve devolver uma referência para o conjunto alterado (primeiro operando).A classe deve também ter um construtor que possa ser invocado sem quaisquer argumentos (construtor por omissão).
A declaração da classe deve ser tal que o seguinte exemplo de utilização seja válido:
Conjunto A, B;
A.insere(1);
A.insere(2);
// A = {1, 2}
B.insere(1);
B.insere(3);
// B = {1, 3}
B += A;
// B = {1, 2, 3}
cout << B.cardinal() << endl; // escreve 3 (e não 4).
[cotação: 3]
2.b) Defina o construtor da classe
Conjunto . Este construtor deve inicializar coerentemente as variáveis de instância da classe.[cotação: 3]
2.c) Defina totalmente o método da classe
Conjunto que, dado um argumento inteiro, devolve true se o seu valor pertence ao conjunto e false no caso contrário.[cotação: 3]
2.d) Assuma que todos os métodos declarados na classe
Conjunto estão bem definidos, excepto o operador +=. Defina o operador += para a classe Conjunto. Este operador insere todos os elementos do conjunto dado como segundo operando no conjunto dado como primeiro operando (i.e., aquele que executa a operação). Deve devolver uma referência para o conjunto alterado (para esse efeito deve usar a instrução return *this;).[cotação: 3]
Questão 3
Escreva um texto sucinto sobre a vantagem de usar variáveis membro privadas numa classe.
[cotação: 3]