Anda di halaman 1dari 4

Exámen de LP.

Septiembre 2007 Teorı́a

1. Un puntero:
A. Permite acceder a una posición de memoria.
B. Mediante el operador *, es posible modificar el valor de la posición a la que apuntan.
C. Ambas son correctas.
2. ¿Es correcta la definición de norte?
char ∗ d i r [ 4 ] = { ” n o r t e ” , ” s u r ” , ” e s t e ” , ” o e s t e ” } ;
char ∗ n o r t e = &d i r [ 0 ] ;

A. Es correcto: se define un puntero a una cadena, la primera del vector ”dir”.


B. Es incorrecto: ”norte”deberı́a ser un doble puntero.
C. Ambas son correctas.
3. ¿Cuál de las siguientes declaraciones de funciones es incorrecta?
A. int func ( int i = 5, int j=0 );
B. int func ( int i = 0, int j = 5, int k);
C. int func ( int i = 2, int j = 5, int k = 10);
4. 4. Para copiar un vector de caracteres v1, en otro nuevo (sin memoria asignada), v2:
A. strcpy ( v2, v1 );
B. v2 = new char[ strlen( v1) ]; strcpy( v2, v1 );
C. v2 = new char[ strlen( v1 ) + 1 ]; strcpy( v2, v1 );
5. 5. Para modificar el tamaño de un array dinámico:
A. Es necesario asignar lo que devuelva el operador new[ ] con el nuevo espacio.
B. Primero es necesario liberar el antiguo espacio, con delete, y después asignarlo con new[ ].
C. Primero es necesario liberar el antiguo espacio, con delete[ ], y después asignarlo con new[ ].
6. 6. Las clases abstractas:
A. Deben tener todas sus funciones como virtuales puras (=0).
B. Deben tener todas sus funciones como virtuales.
C. Todas son incorrectas.
7. 7. Cuando se trabaja con herencia múltiple y dos o más clases base tienen atributos con el mismo nombre:
A. Se les asigna un identificador distinto automáticamente.
B. Se transforman, automáticamente, en un solo atributo.
C. Ambas son incorrectas.
8. 8. Se desea realizar una función que devuelva un vector de caracteres, pasándole el tamaño como parámetro. La
declaración deberı́a ser:
A. char [] creaCadena(int tam);
B. char * creaCadena(int tam);
C. Ambas son correctas.
9. 9. Dada una clase C, para crear un objeto llamando al constructor por defecto hay que:
A. C objC;
B. C objC();
C. C objC = C();
10. 10. Dada la clase A, con atributos a, b y c, privado, protegido y público respectivamente, y la clase B, que deriva
de forma pública de A,
A. Un objeto de B tiene acceso a c.
B. Un objeto de B tiene acceso a los atributos a y b.

Página 1 de 4
Exámen de LP. Septiembre 2007 Teorı́a

C. Un objeto de B tiene acceso a los atributos b y c.


11. 1. Se desea almacenar un DNI (sin letra del NIF), ¿que declaración serı́a la más correcta para realizar tal
almacenamiento? Razona tu respuesta brevemente y con claridad.
A. char dni[9];
B. unsigned int dni;
C. string dni;
D. Todas las declaraciones anteriores sirven para almacenar un dni.
12. 2. Dada una clase C, y los objetos objc1 y objc2, indica razonadamente cuáles son las diferencias, de existir,
entre las siguientes sentencias:
A. C objc1 = objc2;
B. objc1 = objc2;
C. C objc1( objc2 );
13. 3. Suponiendo definidas las siguientes funciones, razona si es correcto el código:
i nt p o t e n c i a ( i nt exponente , i nt ba se = 1 ) ;
void p o t e n c i a ( i nt exponente , double ba se = 1 . 0 ) ;
void main ( ) {
cout<<” 1 e l e v a d o a 3 : ”<<p o t e n c i a (3)<< e n d l ;
}

14. 4. ¿Son correctas las siguientes declaraciones y definiciones? Razónalo brevemente y con claridad.
c l a s s Alumno {
s t r i n g nombre ;
public :
Alumno ( const s t r i n g &n ) : nombre ( n )
{ nombre = n ; }
};
class Profesor {
s t r i n g nombre ;
public :
P r o f e s o r ( const s t r i n g &n ) : nombre ( n )
{ nombre = n ; }
};
c l a s s B e c a r i o : public Alumno , public P r o f e s o r {
s t r i n g nombre ;
public :
B e c a r i o ( const s t r i n g &n )
{ nombre = n ; }
s t r i n g getNombre ( ) const { return nombre ; }
};

15. 1. La ejecución de la siguiente secuencia de instrucciones da un error de protección de memorı́a. Completar el


siguiente trozo de código de forma que se elimine el error.
c l a s s Cadena {
private :
char ∗ cad ;
public :
Cadena ( s t r i n g nombre ) {
cad=new char [ nombre . l e n g t h ( ) + 1 ] ;
s t r c p y ( cad , nombre . c s t r ( ) ) ;
}
char ∗ getCadena ( ) const { return cad ; }
˜ Cadena ( ) { delete [ ] cad ; }
};

Página 2 de 4
Exámen de LP. Septiembre 2007 Teorı́a

i nt main ( ) {
Cadena ∗ c1 = new Cadena ( ”C++, s i n e r r o r e s ” ) ;
Cadena c2 = ∗ c1 ;
co ut << c1−>getCadena ( ) << e n d l ;
delete c1 ;
co ut << c2 . getCadena ( ) << e n d l ;
}

16. 2. Dada la definición de la clase Habitacion, completar la función actualizar, de forma que todas las habitaciones
almacenadas en el fichero binario çlinicaçuyo número esté comprendido entre 100 y 120 (ambos incluidos), queden
vacı́as (el NIF del paciente será la cadena vacı́a).
const unsigned i nt TAMNIF ( 1 0 ) ;
class Habitacion {
unsigned i nt numero ;
char n i f [ TAMNIF ] ;
public :
H a b i t a c i o n ( unsigned i nt num = 0 , char n i f E n t r a d a [ ] = ” \0 ” ) {
numero = num ;
strcpy ( nif , nifEntrada ) ; }
void p u t N i f ( char nuevo Nif [ ] ) { s t r c p y ( n i f , nuevo Nif ) ; }
unsigned i nt getNumero ( ) { return numero ; }
char ∗ g e t N i f ( ) { return n i f ; }
}
void a c t u a l i z a r ( ) {
Habitacion h ;
fstream f l u j o ( ” c l i n i c a ” , ) ;
while ( ! f l u j o . e o f ( ) ) {
i f ( ( h . getNumero ( ) >= 100 ) && ( h . getNumero ( ) <= 120 ) ) {
h . putNIf ( ” \0 ” ) ;
}
}
flujo . close ( );
}

17. 3. En el siguiente programa, indicar cómo se resuelven todos los mensajes (mediante ligadura dinámica o estática)
y qué función se ejecuta (clase base o clase derivada).
c l a s s ba se {
protected :
i nt b ;
public :
v i r t u a l void mo str a r ( ) { co ut << ” b= ” << b << e n d l ; }
void a lma cena r ( ) { c i n >> b ; }
};
c l a s s d e r i v a d a : public ba se {
protected :
i nt d ;
public :
void mo str a r ( ) { co ut << ” b= ” << b << ” , d= ” << d << e n d l ; }
void a lma cena r ( ) { c i n >> b >> d ; }
};
void main ( ) {
ba se obj1 , ∗p ;
d e r i v a d a obj2 , ∗q ;
p = &o b j 1 ;
p −> a lma cena r ( ) ;
p −> mo str a r ( ) ;
q = &o b j 2 ;
q −> a lma cena r ( ) ;

Página 3 de 4
Exámen de LP. Septiembre 2007 Teorı́a

q −> mo str a r ( ) ;
p = &o b j 2 ;
p −> a lma cena r ( ) ;
p −> mo str a r ( ) ;

Página 4 de 4