Parcial POO
Parcial POO
1. Clases y Objetos (25 puntos) Cree una clase llamada `Libro` con los siguientes atributos
privados: - título (string) - autor (string) - año de publicación (int) - precio (double) Implemente
los siguientes métodos: - Un constructor que inicialice todos los atributos - Métodos getter y
setter para cada atributo - Un método `mostrarInfo()` que imprima toda la información del libro
#include <iostream>
using namespace std;
public:
//Declaracion del constructor 'Libro'
Libro(string, string, int, double);
// Getters
string getTitulo();
string getAutor();
int getAnioDePublicacion();
double getPrecio();
// Setters
void setTitulo(string);
void setAutor(string);
void setAnioDePublicacion(int);
void setPrecio(double);
void mostrarinfo();
};
titulo = _titulo;
autor = _autor;
anioDePublicacion= _anioDePublicacion;
precio = _precio;
}
string Libro::getAutor() {
return autor;
}
int Libro::getAnioDePublicacion() {
return anioDePublicacion;
}
double Libro::getPrecio() {
return precio;
}
// Mostrar la información
libro1.mostrarinfo();
return 0;
}
2. Herencia (25 puntos) Cree una clase `Vehículo` con los atributos: - marca (string) - modelo
(string) - año (int) Luego, cree dos clases derivadas: - `Coche` con un atributo adicional
`numeroPuertas` (int) - `Motocicleta` con un atributo adicional `cilindrada` (int) Implemente
constructores apropiados y un método `mostrarDetalles()` en cada clase que muestre toda la
información del vehículo.
#include <iostream>
using namespace std;
public:
// Declaración del constructor 'vehiculo'
vehiculo(string, string, int);
public:
// El constructor de coche recibe los tipos de datos de la
clase padre y los de la propia clase 'coche'
coche(string, string, int, int);
void coche::mostrarDetallesCoche() {
// Llamamos a mostrarDetallesVehiculo() para tener acceso a
los atributos de la clase padre
mostrarDetallesVehiculo();
cout << "Número de Puertas : " << numeroDePuertas << endl;
}
// Declaración de la clase hija 'Motocicleta', que hereda de
'vehiculo'
class Motocicleta : public vehiculo {
private:
int cilindrada;
public:
// El constructor de Motocicleta recibe los tipos de datos
de la clase padre y los de la propia clase 'Motocicleta'
Motocicleta(string, string, int, int);
void Motocicleta::mostrarDetallesMotocicleta() {
// Llamamos a mostrarDetallesVehiculo() para tener acceso a
los atributos de la clase padre
mostrarDetallesVehiculo();
cout << "Cilindrada : " << cilindrada << endl;
}
return 0;
}
3. Relación entre Objetos (20 puntos) Cree una clase `Curso` que tenga una relación de
composición con la clase `Estudiante`. La clase `Curso` debe tener: - nombre del curso (string)
- un array de punteros a objetos `Estudiante` - número máximo de estudiantes (int) - número
actual de estudiantes (int) Implemente métodos para: - Agregar un estudiante al curso - Mostrar
la lista de estudiantes en el curso
#include <iostream>
using namespace std;
public:
// Constructor para inicializar el nombre y la edad del
estudiante
Estudiante(string _nombre, int _edad) {
nombre = _nombre;
edad = _edad;
}
public:
// Constructor para inicializar el nombre del curso y el
número máximo de estudiantes
Curso(string _nombreCurso, int _numMaxEstudiantes) {
nombreCurso = _nombreCurso;
numMaxEstudiantes = _numMaxEstudiantes;
numActualEstudiantes = 0;
estudiantes = new Estudiante*[numMaxEstudiantes]; //
Crear un array de punteros
}
return 0;
}
4. Apuntadores (20 puntos) Implemente una función `intercambiar` que tome dos punteros a
objetos `Libro` (de la pregunta 1) y intercambie sus precios.
#include <iostream>
using namespace std;
public:
// Declaración del constructor 'Libro'
Libro(string, string, int, double);
// Getters
string getTitulo();
string getAutor();
int getAnioDePublicacion();
double getPrecio();
// Setters
void setTitulo(string);
void setAutor(string);
void setAnioDePublicacion(int);
void setPrecio(double);
string Libro::getAutor() {
return autor;
}
int Libro::getAnioDePublicacion() {
return anioDePublicacion;
}
double Libro::getPrecio() {
return precio;
}
return 0;
}
public:
// Constructor de copia
vehiculo(const vehiculo& v) {
marca = v.marca;
modelo = v.modelo;
anio = v.anio;
cout << "Constructor de copia llamado" << endl;
}
// Destrutor
~vehiculo() {
cout << "Destruyendo vehículo: " << marca << " " <<
modelo << endl;
}
public:
// Constructor por defecto
coche() : vehiculo() {
numeroDePuertas = 0;
}
public:
// Constructor por defecto
Motocicleta() : vehiculo() {
cilindrada = 0;
}
// Copia de coche1
cout << "Copia de coche1:" << endl;
coche coche2(coche1);
coche2.mostrarDetallesCoche();
cout << endl;
// Motocicleta con parámetros
cout << "Motocicleta con parámetros:" << endl;
Motocicleta moto1("Yamaha", "33JK", 2025, 125);
moto1.mostrarDetallesMotocicleta();
cout << endl;
return 0;
}