0% found this document useful (0 votes)
15 views18 pages

Parcial POO

Ejercicios POO

Uploaded by

SEBASTIAN HOYOS
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views18 pages

Parcial POO

Ejercicios POO

Uploaded by

SEBASTIAN HOYOS
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

PARCIAL DE PROGRAMACIÓN ORIENTADA A OBJETOS

SEBASTIÁN HOYOS CALVACHE


INGENIERÍA DE SISTEMAS
104624011504
UNIVERSIDAD DEL CAUCA

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;

//Declaracion de la clase Libro


class Libro{
private:
string titulo;
string autor;
int anioDePublicacion;
double precio;

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();
};

//El constructor inicializa los atributos


Libro::Libro(string _titulo, string _autor, int
_anioDePublicacion, double _precio){

titulo = _titulo;
autor = _autor;
anioDePublicacion= _anioDePublicacion;
precio = _precio;
}

// Implementación de los Getters


string Libro::getTitulo() {
return titulo;
}

string Libro::getAutor() {
return autor;
}

int Libro::getAnioDePublicacion() {
return anioDePublicacion;
}

double Libro::getPrecio() {
return precio;
}

// Implementación de los Setters


void Libro::setTitulo(string _titulo) {
titulo = _titulo;
}

void Libro::setAutor(string _autor) {


autor = _autor;
}

void Libro::setAnioDePublicacion(int _anioDePublicacion) {


anioDePublicacion = _anioDePublicacion;
}

void Libro::setPrecio(double _precio) {


precio = _precio;
}

//'mostrarinfo()' imprime toda la informacion del libro


void Libro::mostrarinfo(){

cout << "Título :" << titulo <<endl;


cout << "Autor : " << autor <<endl;
cout << "Año de publicación : " << anioDePublicacion <<endl;
cout <<"Precio : " << precio <<endl;
}

int main(int argc, char *argv[]) {

Libro libro1("La campana de cristal", "Sylvia Plath", 1992,


3.99);

// 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;

// Declaración de la clase padre 'vehiculo'


class vehiculo {
private:
string marca;
string modelo;
int anio;

public:
// Declaración del constructor 'vehiculo'
vehiculo(string, string, int);

// Método para mostrar detalles del vehiculo


void mostrarDetallesVehiculo();
};

// Inicialización de los atributos


vehiculo::vehiculo(string _marca, string _modelo, int _anio) {
marca = _marca;
modelo = _modelo;
anio = _anio;
}

// Método que muestra los detalles del vehiculo


void vehiculo::mostrarDetallesVehiculo() {
cout << "Marca : " << marca << endl;
cout << "Modelo : " << modelo << endl;
cout << "Año : " << anio << endl;
}

// Declaración de la clase hija 'coche', que hereda de


'vehiculo'
class coche : public vehiculo {
private:
int numeroDePuertas;

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);

// Método para mostrar detalles del coche


void mostrarDetallesCoche();
};

// Inicializar los atributos de coche junto con los atributos de


la clase padre
coche::coche(string _marca, string _modelo, int _anio, int
_numeroDePuertas)
: vehiculo(_marca, _modelo, _anio) {
numeroDePuertas = _numeroDePuertas;
}

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);

// Método para mostrar detalles de la motocicleta


void mostrarDetallesMotocicleta();
};

// Inicializar los atributos de motocicleta junto con los


atributos de la clase padre
Motocicleta::Motocicleta(string _marca, string _modelo, int
_anio, int _cilindrada)
: vehiculo(_marca, _modelo, _anio) {
cilindrada = _cilindrada;
}

void Motocicleta::mostrarDetallesMotocicleta() {
// Llamamos a mostrarDetallesVehiculo() para tener acceso a
los atributos de la clase padre
mostrarDetallesVehiculo();
cout << "Cilindrada : " << cilindrada << endl;
}

int main(int argc, char *argv[]) {


coche coche1 = coche("Ferrari", "34kX", 2027, 2);
coche1.mostrarDetallesCoche();
Motocicleta moto1 = Motocicleta("Yamaha", "33JK", 2025,
125);
moto1.mostrarDetallesMotocicleta();

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;

// Declaración de la clase 'Estudiante'


class Estudiante {
private:
string nombre;
int edad;

public:
// Constructor para inicializar el nombre y la edad del
estudiante
Estudiante(string _nombre, int _edad) {
nombre = _nombre;
edad = _edad;
}

// método para obtener el nombre del estudiante


string getNombre() {
return nombre;
}
// Método para obtener la edad del estudiante
int getEdad() {
return edad;
}

// Método para mostrar la información del estudiante


void mostrarInfoEstudiante() {
cout << "Nombre: " << nombre << ", Edad: " << edad <<
endl;
}
};

// Declaración de la clase 'Curso'


class Curso {
private:
string nombreCurso;
Estudiante** estudiantes; // Array de punteros a objetos
'Estudiante'
int numMaxEstudiantes;
int numActualEstudiantes;

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
}

// Destructor para liberar memoria


~Curso() {
for (int i = 0; i < numActualEstudiantes; i++) {
delete estudiantes[i]; // Liberar la memoria de cada
objeto 'Estudiante'
}
delete[] estudiantes; // Liberar el array de punteros
}

// Método para agregar un estudiante al curso


void agregarEstudiante(string nombreEstudiante, int
edadEstudiante) {
if (numActualEstudiantes < numMaxEstudiantes) {
estudiantes[numActualEstudiantes] = new
Estudiante(nombreEstudiante, edadEstudiante);
numActualEstudiantes++;
} else {
cout << "El curso ha alcanzado el número máximo de
estudiantes." << endl;
}
}

// Método para mostrar la lista de estudiantes en el curso


void mostrarEstudiantes() {
cout << "Curso: " << nombreCurso << endl;
cout << "Lista de estudiantes: " << endl;
for (int i = 0; i < numActualEstudiantes; i++) {
estudiantes[i]->mostrarInfoEstudiante();
}
}
};

// Función principal para probar el código


int main(int argc, char *argv[]) {
//se crea un objeto de tipo 'Curso' con un máximo de 3
estudiantes
Curso curso1("Lab Poo", 3);

// Agregar estudiantes al curso


curso1.agregarEstudiante("sebastian Hoyos", 17);
curso1.agregarEstudiante("maría Gómez ", 21);
curso1.agregarEstudiante("Carlos López", 22);

//intentar agregar otro estudiante cuando ya se ha alcanzado


el límite
curso1.agregarEstudiante("ana Fernández ", 23);

// Mostrar la lista de estudiantes en el curso


curso1.mostrarEstudiantes();

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;

// Declaración de la clase Libro


class Libro {
private:
string titulo;
string autor;
int anioDePublicacion;
double precio;

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);

//Método para mostrar la información del libro


void mostrarinfo();
};

// El constructor inicializa los atributos


Libro::Libro(string _titulo, string _autor, int
_anioDePublicacion, double _precio) {
titulo = _titulo;
autor = _autor;
anioDePublicacion = _anioDePublicacion;
precio = _precio;
}

// Implementación de los Getters


string Libro::getTitulo() {
return titulo;
}

string Libro::getAutor() {
return autor;
}

int Libro::getAnioDePublicacion() {
return anioDePublicacion;
}

double Libro::getPrecio() {
return precio;
}

// Implementación de los Setters


void Libro::setTitulo(string _titulo) {
titulo = _titulo;
}

void Libro::setAutor(string _autor) {


autor = _autor;
}

void Libro::setAnioDePublicacion(int _anioDePublicacion) {


anioDePublicacion = _anioDePublicacion;
}

void Libro::setPrecio(double _precio) {


precio = _precio;
}

// 'mostrarinfo()' imprime toda la información del libro


void Libro::mostrarinfo() {
cout << "Título: " << titulo << endl;
cout << "Autor: " << autor << endl;
cout << "Año de publicación: " << anioDePublicacion << endl;
cout << "Precio: " << precio << endl;
}

//Función que intercambia los precios de dos objeto s 'Libro'


usando punteros
void intercambiar(Libro* libro1, Libro* libro2) {
double temp = libro1->getPrecio();
libro1->setPrecio(libro2->getPrecio());
libro2->setPrecio(temp);
}

int main(int argc, char *argv[]) {


//Crear dos objetos 'Libro'
Libro libro1("La campana de cristal", "Sylvia Plath", 1992,
3.99);
Libro libro2("La metamorfosis", "Frans Kafka", 1980, 9.99);

//Mostrar la información antes del intercambio


cout << "Antes de hacer el intercambio:" << endl;
libro1.mostrarinfo();
libro2.mostrarinfo();

// Intercambiar los precios de los libros


intercambiar(&libro1, &libro2);

// Mostrar la información después del intercambio


cout << " Después de hacer el intercambio:" << endl;
libro1.mostrarinfo();
libro2.mostrarinfo();

return 0;
}

5. Constructores (10 puntos) Para la clase `Vehículo` de la pregunta 2, implemente: - Un


constructor por defecto - Un constructor que acepte todos los parámetros - Un constructor de
copia - Un destructor que imprima un mensaje cuando se destruya un objeto Demuestre el uso
de cada uno de estos constructores y el destructor en la función `main()`.
#include <iostream>
using namespace std;

// declaracion de la clase 'vehiculo '


class vehiculo {
private:
string marca;
string modelo;
int anio;

public:

// Constructor por defecto


vehiculo() {
marca = "Desconocida";
modelo = "Desconocido";
anio = 0;
cout << "Constructor por defecto llamado" << endl;
}

// Constructor con parámetros


vehiculo(string _marca, string _modelo, int _anio) {
marca = _marca;
modelo = _modelo;
anio = _anio;
cout << "constructor con parámetros llamado" << endl;
}

// 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;
}

//Mostrar detalles del vehiculo


void mostrarDetallesVehiculo();
};

// Mostrar detalles del vehiculo


void vehiculo::mostrarDetallesVehiculo() {
cout << "Marca: " << marca << endl;
cout << "Modelo: " << modelo << endl;
cout << "Año: " << anio << endl;
}

// la clase 'coche' hereda de 'vehiculo'


class coche : public vehiculo {
private:
int numeroDePuertas;

public:
// Constructor por defecto
coche() : vehiculo() {
numeroDePuertas = 0;
}

// Constructor con parámetros (marca, modelo, año, puertas)


coche(string _marca, string _modelo, int _anio, int
_numeroDePuertas)
: vehiculo(_marca, _modelo, _anio) {
numeroDePuertas = _numeroDePuertas;
}
// Constructor de copia
coche(const coche& c) : vehiculo(c) {
numeroDePuertas = c.numeroDePuertas;
}

// Mostrar detalles del coche


void mostrarDetallesCoche();
};

//Mostrar detalles del coche


void coche::mostrarDetallesCoche() {
mostrarDetallesVehiculo(); // Llama lo del padre
cout << "Número de Puertas: " << numeroDePuertas << endl;
}

//la clase 'Motocicleta' hereda de 'vehiculo'


class Motocicleta : public vehiculo {
private:
int cilindrada;

public:
// Constructor por defecto
Motocicleta() : vehiculo() {
cilindrada = 0;
}

// Constructor con parámetros (marca, modelo, año,


cilindrada)
Motocicleta(string _marca, string _modelo, int _anio, int
_cilindrada)
: vehiculo(_marca, _modelo, _anio) {
cilindrada = _cilindrada;
}
// Constructor de copia
Motocicleta(const Motocicleta& m) : vehiculo(m) {
cilindrada = m.cilindrada;
}

// Mostrar detalles de la motocicleta


void mostrarDetallesMotocicleta();
};

// Mostrar detalles de la motocicleta


void Motocicleta::mostrarDetallesMotocicleta() {
mostrarDetallesVehiculo(); // Llama lo del padre
cout << "Cilindrada: " << cilindrada << endl;
}

int main(int argc, char *argv[]) {


// Vehículo por defecto
cout << "Vehículo por defecto:" << endl;
vehiculo vehiculoDefecto;
vehiculoDefecto.mostrarDetallesVehiculo();
cout << endl;

// Coche con parámetros


cout << "Coche con parámetros:" << endl;
coche coche1("Ferrari", "34kX", 2027, 2);
coche1.mostrarDetallesCoche();
cout << endl;

// 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;
}

You might also like