Examen de Lenguajes de Programación II Ingeniería Técnica en

Anuncio
Examen de Lenguajes de Programación II
Ingeniería Técnica en Informática de Gestión
Convocatoria de febrero de 2001
Pregunta 1 (3 puntos)
Se quiere realizar un programa para la Universidad que maneje un fichero de personas
relacionadas con la Titulación de Ingeniería Informática de Gestión. Cada ficha contendrá
la información de una persona relacionada con la titulación, y se implementará a partir de
una clase “persona” definida de la siguiente forma:
class persona
{ char *nombre;
int DNI;
public:
persona();
~persona();
int ConsultarDNI();
virtual void RellenarFicha();
virtual void VisualizarFicha();
...// Esto significa que se pueden añadir tanto miembros privados, como públicos
};
Define dos clases derivadas de “persona”:
• La clase “alumno”, que además de la información de la clase base, contenga el curso
más alto en el que está matriculado.
• La clase “profesor”, que además de la información de la clase base, contenga el nombre
del departamento al que pertenece.
Además, implementa otra clase “registroITIG” que contenga una lista de alumnos y
profesores relacionados con la titulación, de modo que se puedan realizar sobre esta lista las
siguientes tres operaciones:
• Introducir una persona en la lista
• Visualizar la información de todas las personas de la lista.
• Buscar y mostrar la información de una persona de la lista por DNI.
Escribe el código completo de todas las clases, con sus métodos y variables miembro y una
función principal que ofrezca un menú mediante el que se puedan elegir las tres
operaciones anteriores de la clase “registroITIG”.
Pregunta 2 (5 puntos)
Apartado A.
Dada la siguiente clase:
class cuenta
{
char *titular;
int saldo;
};
completa la clase para que la siguiente función sea correcta:
cuenta NuevaCuentaMismoTitular ( cuenta c1)
Examen de Lenguajes de Programación II
17/02/2001
1/4
{
cuenta c2;
int saldo;
c2.AsignaTitular (c1.titular);
cout << “¿Cuál es el saldo inicial?”; cin>>saldo;
c2.AsignaSaldo (saldo);
return c2;
}
Apartado B.
Dada la siguiente estructura:
struct movimiento
{
int pts;
char fecha[9];
};
define la clase “historico_cuenta” de manera que contenga los mismos datos que la clase
“cuenta” más una lista de movimientos (la suma de las cantidades de todos los movimientos
de una cuenta debe concordar con el saldo de la misma). Para ello debes reutilizar el código
del apartado anterior y definir aquellas funciones que sean necesarias para que la siguiente
función sea correcta:
historico_cuenta NuevaCuentaMismoTitular (historico_cuenta c1)
{
movimiento m;
historico_cuenta c2;
char resp;
c2.AsignaTitular (c1.titular);
cout<<”¿Desea agregar nuevos movimientos?”; cin>>resp;
while (resp==’s’ || resp==’S’)
{
PedirDatosMovimiento (m);
c2.InsertarMovimiento (m);
cout<<”¿Desea agregar más movimientos?”; cin>>resp;
}
cout<<”¿Desea agregar los movimientos de la cuenta original?”;
cin>>resp;
if(resp==’s’ || resp==’S’) c2.AgregarMovimientosCuenta (c1);
return c2;
}
Apartado C.
Completa la clase “historico_cuenta” para que el código de la siguiente función sea
correcto:
void Ingreso (historico_cuenta &c)
{
movimiento m;
PedirDatosMovimiento (m);
c=c+m;
cout<<”El contenido actual de la cuenta es:” << c;
}
Apartado D.
En la clase “cuenta” tenemos las funciones “AsignaTitular” y “AsignaSaldo”. Mientras la
primera función es interesante que sea accesible en la clase “historico_cuenta”, no sucede
lo mismo con la segunda, pues modifica el saldo sin introducir ningún movimiento. ¿Cómo
puede solventarse esta situación?.
Examen de Lenguajes de Programación II
17/02/2001
2/4
Nombre:
ATENCIÓN: Esta hoja se entregará junto con el examen.
Pregunta 3 (2 puntos)
Contesta con verdadero o falso a las afirmaciones que se te formulan a continuación.
Recuerda que las preguntas falladas descuentan sobre las acertadas (Respuestas acertadas
+0,1 y respuestas falladas –0.1). Escribe “V” o “F”, según sea verdadero o falso, junto al
número correspondiente a la afirmación.
1. Las variables de clase se definen mediante la palabra static y presentan el
mismo contenido para todos los objetos de la clase.
2. Dadas las siguientes declaraciones:
char s1[30], s2[30];
para que la siguiente instrucción copie la cadena s2 en s1
s1=s2;
se debe definir la sobrecarga del operador asignación.
3. Las funciones template son una forma de definir sobrecarga de funciones de una
manera automática.
4. El tipo genérico de una función template debe aparecer en los parámetros o en el
tipo de retorno.
5. Una función virtual pura se define con “=0” y no permite que la clase tenga
objetos, aunque sí punteros.
6. Aunque no definamos ningún constructor en una clase siempre tenemos el
llamado constructor por defecto el cual no recibe parámetros y se encarga de
inicializar a cero las variables de la clase.
7. Además de los operadores de conversión, los constructores permiten convertir
objetos de una clase en otra.
8. En el operador de subíndice [ ] se suele devolver un valor por referencia.
9. En la sobrecarga de C++ no es posible definir nuevos operadores aparte de los
que da el lenguaje, pero sí que se puede cambiar el número de operandos de la
mayoría de ellos.
10. La herencia virtual sirve para impedir que en la herencia simple una clase reciba
varias veces el contenido de su clase base.
11. En la herencia virtual se puede realizar una llamada desde el constructor de la
clase nieta al de la clase abuela.
12. Los punteros a una clase base pueden apuntar a objetos de sus clases derivadas,
pero no es correcto lo contrario.
13. En una función donde se requiere como parámetro un objeto de una clase
derivada puede pasarse en su lugar un objeto de la clase base.
14. Una diferencia entre new y malloc es que la primera puede llevar aparejada la
ejecución de un constructor.
15. Dadas las siguientes tres clases: zoológico, animal, mono. La relación de
herencia más lógica entre ellas sería: mono derivada de animal, animal derivada
de zoológico.
Examen de Lenguajes de Programación II
17/02/2001
3/4
16. Un miembro protegido (protected) en una clase X es accesible desde X, desde
las clases derivadas directamente de ésta y desde las funciones amigas (friend),
pero no desde el resto del programa.
17. Dada la siguiente clase:
class A
{
int v;
public:
A(int x) { v=x;}
};
la siguiente instrucción define un vector de 10 objetos A y los inicializa con el
valor 30:
A vector[10] (30);
18. A las variables de clase sólo se puede acceder desde las funciones de clase.
19. Una función friend no puede hacer uso de la palabra this.
20. Una clase puede tener varios destructores, aunque todos ellos deberán llevar
parámetro void.
Examen de Lenguajes de Programación II
17/02/2001
4/4
Descargar