Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modelo de Informe Practica #07 - 2023
Modelo de Informe Practica #07 - 2023
Práctica N° 07
Elaborado por:
Joel Gerardo Cruces de la Cruz
Luis Mariano Terrones Ortega
GRUPO N° 01
Presentado por:
ii
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases
Derivadas, Herencia Public, Protected y Private en C++
RECONOCIMIENTOS
A mis padres, al Ingeniero y al tutor respectivo, que nos apoyaron en lo largo de nuestra
carrera universitaria.
PALABRAS CLAVES
iii
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases
Derivadas, Herencia Public, Protected y Private en C++
ÍNDICE
1. RESÚMEN 1
2. INTRODUCCIÓN ...................................................................................................... 1
3. MARCO TEÓRICO .................................................................................................... 1
3.1 Clase Base ....................................................................................................... 1
3.2 Clase Derivada ................................................................................................. 1
3.3 Miembros Protected .......................................................................................... 2
3.4 Constructores de clases derivadas ................................................................... 4
3.5 Destructores de clases derivadas ..................................................................... 6
3.6 Clases de derivación( especificadores de acceso) ............................................ 7
4. MODELAMIENTO ..................................................................................................... 1
4.1 Diagrama de clases .......................................................................................... 1
4.2 Diagrama de secuencia .................................................................................... 2
5. EXPERIENCIAS DE PRÁCTICA ............................................................................... 3
6. EJERCICIOS PROPUESTOS: .................................................................................. 5
7. CONCLUSIONES DE LA PRÁCTICA: ....................................................................... 9
8. CUESTIONARIO ..................................................................................................... 10
9. BIBLIOGRAFÍA ....................................................................................................... 14
iv
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases
Derivadas, Herencia Public, Protected y Private en C++
v
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
1. RESÚMEN
En este documento se realiza la descripcion de los conceptos Clases Bases y Clases Derivadas,
Miembros Protected, Constructores y Destructores en Clases Derivadas, Herencia Public, Protected
y Private en la Programación Orientada a Objetos (POO), los cuales son fueron presentados en la
guia de practica. Tambien se realizo la aplicación de los conceptos mencionados en clases, asi como
la implementacion de Herencia Public, Protected y Private para el codigo que se desarrollo en el
laboratorio 7 durante las horas de practica, se realizo su diagrama de secuencia representando cada
relacion que contiene cada clase del programa desarrolado, posteriormente se responden las
preguntas del cuestionario de la practica para finalmente realizar las conclusiones y referencias
respectivas del informe.
2. INTRODUCCIÓN
Este informe aborda el tema de las clases bases y clases derivadas, así como los miembros
protegidos, constructores y destructores en clases derivadas, y la herencia pública, protegida y
privada en el lenguaje de programación C++.
En la programación orientada a objetos, las clases son una herramienta fundamental para organizar
y estructurar nuestro código. Una clase base es aquella que proporciona la estructura y
funcionalidades básicas, mientras que las clases derivadas se crean a partir de la clase base y heredan
sus características y comportamientos.
Uno de los aspectos importantes en la herencia es la utilización de los miembros protegidos. Estos
miembros son accesibles tanto en la clase base como en las clases derivadas, permitiendo que los
miembros protegidos puedan ser utilizados y modificados por las clases derivadas.
En cuanto a los constructores y destructores en clases derivadas, estos son métodos especiales que
se utilizan para inicializar y liberar recursos de los objetos. Al heredar de una clase base, es posible
definir constructores y destructores específicos para las clases derivadas, permitiendo así una mayor
personalización y control sobre la creación y destrucción de los objetos.
Además, en C++, se pueden utilizar los conceptos de herencia pública, protegida y privada. La
herencia pública permite que los miembros públicos de la clase base sean accesibles desde las clases
derivadas. La herencia protegida permite que los miembros protegidos de la clase base sean
accesibles desde las clases derivadas, pero no desde otros contextos. Por último, la herencia privada
restringe el acceso a los miembros de la clase base solo dentro de la propia clase derivada,
ocultándolos al resto del programa.
1
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas, Herencia Public, Protected y Private en C++
3. MARCO TEÓRICO
1
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas, Herencia Public, Protected y Private en C++
2
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas, Herencia Public, Protected y Private en C++
3
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas, Herencia Public, Protected y Private en C++
4
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas, Herencia Public, Protected y Private en C++
5
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas, Herencia Public, Protected y Private en C++
6
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas, Herencia Public, Protected y Private en C++
7
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas, Herencia Public, Protected y Private en C++
8
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
4. MODELAMIENTO
4.1 Diagrama de clases
1
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
2
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
5. EXPERIENCIAS DE PRÁCTICA
La empresa XYZ necesita desarrollar un sistema de seguridad para proteger la información personal
y financiera de sus clientes durante el proceso de compra en línea. El sistema debe ser capaz de
encriptar la información ingresada por el cliente y almacenarla de manera segura en la base de datos
de la empresa. Además, el sistema debe ser capaz de verificar la autenticidad del cliente antes de
procesar el pago.
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Cliente
{
protected:
string name;
int dni;
string direccion;
int telefono;
int nrodetarjeta;
Cliente(string name,int dni,string direccion,int telefono, int
nrodetarjeta) :
name(name),dni(dni),direccion(direccion),telefono(telefono),nrodetarjeta
(nrodetarjeta){}
void encriptarInformacion()
{
// Encriptar la información
string infoEncriptada;
for (char& c : name) {
if (c != 'z') {
c = c + 1;
} else {
c = 'a';
}
}
dni = sustitucionNumerica(dni);
3
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
return numeroEncriptadoInt;
}
};
class ClienteSeguro : protected Cliente
{
public:
ClienteSeguro(string name,int dni,string direccion,int telefono,
int nrodetarjeta):Cliente(name,dni,direccion,telefono, nrodetarjeta){}
void encriptardatoscliente()
{
Cliente :: encriptarInformacion();
}
void mostrarinformacionEncriptada()
{
cout << "Nombre: " << name << endl;
cout << "DNI: " << dni << endl;
cout << "Direccion: " << direccion << endl;
cout << "Telefono: " << telefono << endl;
cout << "Numero de tarjeta: " << nrodetarjeta << endl;
}
};
int main()
{
ClienteSeguro objcliente("Juan", 897346675,"Calle 13",987456123,
123456789);
objcliente.encriptardatoscliente();
objcliente.mostrarinformacionEncriptada();
return 0;
}
4
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
6. EJERCICIOS PROPUESTOS:
1.- Crea una clase base "Vehículo" con atributos como la marca, modelo, año de fabricación y
precio. Luego, crea dos clases derivadas, "Automóvil" y "Motocicleta" que hereden de la clase
"Vehículo" y añadan atributos específicos como número de puertas y tipo de combustible en el caso
del automóvil y cilindrada en el caso de la motocicleta.
#include<iostream>
#include <string>
using namespace std;
class Vehiculo
{
private:
string marca;
string modelo;
int aniofab;
float precio;
public:
Vehiculo(string marca ="", string modelo= "", int aniofab = 0,
float precio = 0):marca(marca),
modelo(modelo),aniofab(aniofab),precio(precio){}
void mostrarAtributos()
{
cout<< "Marca: "<< marca << endl;
cout<< "Modelo: "<< modelo<< endl;
cout<< "Año: "<< aniofab << endl;
cout<< "Precio: "<< precio << endl;
}
};
int numpuertas ;
string combustible ;
public:
Automovil() : Vehiculo()
{
numpuertas = 0;
combustible ="";
}
Automovil(string marca ="", string modelo= "", int aniofab = 0,
float precio = 0, int numpuertas = 0, string combustible ="") :
Vehiculo(marca,modelo,aniofab,precio)
{
this->numpuertas = numpuertas;
this->combustible = combustible;
void mostrarAtributosAutomovil()
5
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
{
Vehiculo:: mostrarAtributos();
cout<< "Numero de puertas: "<< numpuertas << endl;
cout<< "Tipo de Combustible: "<< combustible<< endl;
}
};
{
this-> cilindrada = cilindrada;
}
void mostrarAtributosMotocicleta()
{
Vehiculo:: mostrarAtributos();
cout<< "Cilindradas: "<< cilindrada << endl;
}
};
int main()
{
cout<<"CLASE BASE VEHICULO"<<endl;
Vehiculo obj1("Toyota","corolla",2019,8000);
obj1.mostrarAtributos();
cout<<endl;
};
6
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
2.- Crea una clase "Persona" con atributos como el nombre, la edad y el salario. Añade un miembro
"protected" para la dirección de correo electrónico. Luego, crea dos clases derivadas, "Empleado"
y "Cliente" que hereden de la clase "Persona" y que tengan acceso a la dirección de correo
electrónico.
#include<iostream>
#include <string>
using namespace std;
class Persona
{
protected:
string correoElc;
public:
string name;
int edad;
float salario;
Persona (string name, int edad, float salario, string correo) :
name(name), edad(edad), salario(salario),correoElc(correo){ }
};
};
class Cliente : public Empleado
{
public:
Cliente (string name, int edad, float salario, string correo) :
Empleado(name,edad,salario,correo){ }
};
int main()
{
Persona objPersona("Julio",25,2500,"julio25@gmail.com");
Empleado objEmpleado("Marco",30,3500,"Marco2005@gmail.com");
cout<<"Datos Empleado:"<<endl;
cout<<"Nombre: "<<objEmpleado.name <<endl;
cout<<"Edad: "<<objEmpleado.edad <<endl;
7
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
cout<<endl;
cout<<endl;
Cliente objCliente("Pedro",30,3500,"Perdro2569@gmail.com");
cout<<"Datos Cliente:"<<endl;
cout<<"Nombre: "<<objCliente.name <<endl;
cout<<"Edad: "<<objCliente.edad <<endl;
cout<<"Salario: "<<objCliente.salario <<endl;
objCliente.usarCorreoElectronicoCLIENTE();
};
3. Crea una clase base "Móvil" con atributos como la marca, el modelo y el sistema operativo. Añade
un constructor y un destructor a la clase. Luego, crea dos clases derivadas, "Teléfono" y "Tablet"
que hereden de la clase "Móvil" y que tengan constructores y destructores específicos para cada
clase.
#include<iostream>
#include <string>
using namespace std;
class Movil
{
private:
string marca;
string modelo;
string sistemaOperativo;
public:
Movil(string marca, string modelo, string sistemaOperativo) :
marca(marca), modelo(modelo), sistemaOperativo(sistemaOperativo){}
void mostrarAtributos()
{
cout<< "Marca: "<< marca << endl;
cout<< "Modelo: "<< modelo<< endl;
cout<< "Sistema Operativo: "<< sistemaOperativo << endl;
}
~Movil(){};
};
class Telefono : public Movil
{
public:
Telefono(string marca, string modelo, string sistemaOperativo)
: Movil(marca,modelo,sistemaOperativo){}
void mostraAtributosTelefono()
{
Movil::mostrarAtributos();
};
~Telefono(){};
};
8
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
void mostraAtributosTablet()
{
Movil::mostrarAtributos();
};
~Tablet(){};
};
int main()
{
// Ejercicio 3
cout<<"CLASE BASE MOVIL"<<endl;
Movil mimovil("Samsung","A20","One UI 5.1");
mimovil.mostrarAtributos();
mimovil.~Movil();
cout<<endl;
cout<<endl;
7. CONCLUSIONES DE LA PRÁCTICA:
a) Las clases bases y clases derivadas son esenciales en la programación orientada a objetos,
permitiendo la reutilización y jerarquización del código.
b) Los miembros protegidos brindan acceso controlado a las clases derivadas, manteniendo la
encapsulación.
c) Los constructores y destructores en clases derivadas permiten personalizar la creación y
liberación de recursos.
d) La herencia pública, protegida y privada en C++ determina el nivel de acceso a los miembros
de la clase base desde las clases derivadas.
e) La correcta utilización de estos conceptos mejora la modularidad y estructura del código
orientado a objetos.
9
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
8. CUESTIONARIO
a) ¿Cuál es la diferencia entre una clase base y una clase derivada en programación orientada
a objetos?
• En programación orientada a objetos, una clase base es una clase existente que se utiliza como punto de partida
para crear una nueva clase, conocida como clase derivada. La clase derivada hereda los atributos y métodos de
la clase base y puede agregar nuevos atributos y métodos o modificar los existentes.
b) ¿Cómo se establece la relación entre una clase base y una clase derivada en C++?
• En C++, la relación entre una clase base y una clase derivada se establece mediante la palabra clave
"public" o "protected" seguida del nombre de la clase base después de la declaración de la clase
derivada. Por ejemplo, para declarar una clase derivada llamada "DerivedClass" que hereda de una
clase base llamada "BaseClass" de manera pública,
c) ¿Qué es la herencia de clases y cuál es su importancia en la programación orientada a
objetos?
• La herencia de clases es un concepto fundamental en la programación orientada a objetos que
permite la creación de jerarquías de clases. Permite que una clase derivada herede los atributos y
métodos de una clase base, lo que promueve la reutilización de código y facilita la organización y
estructuración del programa. La herencia de clases es importante porque mejora la modularidad, el
mantenimiento y la extensibilidad del código.
d) ¿Cuál es la sintaxis de declaración de una clase derivada en C++?
class ClaseDerivada : public ClaseBase {
// Definición de la clase derivada
};
e) ¿Qué es un miembro protected en una clase y qué permite hacer?
• En una clase, un miembro protected es un tipo de acceso intermedio entre los miembros públicos y
privados. Los miembros protected son accesibles desde la clase misma, sus clases derivadas y las
clases amigas, pero no desde el exterior de la clase.
f) ¿Cómo se accede a un miembro protected en una clase base y una clase derivada?
• Para acceder a un miembro protected en una clase base, se puede hacer directamente dentro de la
clase base o a través de una clase derivada utilizando la herencia. Desde una clase derivada, se puede
acceder a los miembros protected heredados de la clase base de manera similar a como se accede a
los miembros propios de la clase derivada.
g) Proporciona un ejemplo de uso de un miembro protected en una clase base y una clase
derivada.
class ClaseBase {
protected:
int protectedMember;
};
class ClaseDerivada : public ClaseBase {
public:
void setProtectedMember(int value) {
protectedMember = value; // Acceso al miembro protected en la clase derivada
}
10
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
};
int main() {
ClaseDerivada obj;
obj.setProtectedMember(10); // Uso de la función para acceder al miembro protected en la
clase derivada
return 0;
}
h) ¿Qué son los constructores y destructores en C++?
• Los constructores y destructores son funciones especiales en C++ que se utilizan para inicializar y
destruir objetos de una clase, respectivamente. El constructor se invoca automáticamente al crear
un objeto y se utiliza para inicializar sus miembros, mientras que el destructor se invoca
automáticamente cuando el objeto deja de existir y se utiliza para liberar recursos o realizar otras
tareas de limpieza
i) ¿Cómo se utiliza un constructor en una clase derivada?
• Para utilizar un constructor en una clase derivada, se puede llamar al constructor de la clase base
utilizando la lista de inicialización en la definición del constructor de la clase derivada. Esto asegura
que los miembros heredados de la clase base se inicialicen correctamente.
class ClaseBase {
public:
ClaseBase (int value) {
// Constructor de la clase base
}
};
class ClaseDerivada : public ClaseBase {
public:
ClaseDerivada (int value) : ClaseBase (value) {
// Constructor de la clase derivada
}
};
int main() {
ClaseDerivada obj(10); // Creación de un objeto de la clase derivada con llamada al constructor
return 0;
}
j) ¿Qué es la herencia múltiple y cómo se manejan los constructores y destructores en este
caso?
• La herencia múltiple es un concepto en programación orientada a objetos que permite que una clase
derive de múltiples clases base. En C++, los constructores y destructores en la herencia múltiple se
manejan de manera secuencial, en el orden en que se mencionan las clases base en la lista de
herencia. Cada constructor de clase base correspondiente se invoca en la lista de inicialización del
constructor de la clase derivada.
11
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
k) ¿Cuáles son las diferencias entre la herencia pública, protegida y privada en C++?
• Herencia pública (public): Los miembros públicos de la clase base son accesibles como miembros
públicos de la clase derivada. Los miembros protegidos de la clase base son accesibles como
miembros protegidos de la clase derivada. Los miembros privados de la clase base no son
accesibles directamente en la clase derivada.
• Herencia protegida (protected): Los miembros públicos y protegidos de la clase base se
convierten en miembros protegidos de la clase derivada. Los miembros privados de la clase base
no son accesibles directamente en la clase derivada.
• Herencia privada (private): Los miembros públicos y protegidos de la clase base se convierten en
miembros privados de la clase derivada. Los miembros privados de la clase base no son accesibles
directamente en la clase derivada.
l) Proporciona un ejemplo de uso de la herencia pública en C++.
class BaseClass {
public:
void publicMember() {
// Miembro público
}
};
int main() {
DerivedClass obj;
obj.publicMember(); // Acceso al miembro público heredado de la clase base
return 0;
}
m) Proporciona un ejemplo de uso de la herencia protegida en C++.
class BaseClass {
protected:
void protectedMember() {
// Miembro protegido
}
};
class DerivedClass : protected BaseClass {
// Herencia protegida
};
int main() {
DerivedClass obj;
obj.protectedMember(); // Acceso al miembro protegido
return 0;
}
12
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
int main() {
DerivedClass obj;
// obj.privateMember(); // No se puede acceder al miembro privado
return 0;
}
o) ¿Qué es la herencia virtual en C++ y cuándo se utiliza?
• La herencia virtual en C++ se utiliza cuando se necesita resolver el problema de la herencia múltiple
de manera adecuada. Permite que una clase base sea heredada virtualmente por múltiples clases
derivadas. Esto evita la creación de instancias redundantes de la clase base y resuelve los problemas
de ambigüedad que pueden surgir con la herencia múltiple.
p) ¿Cómo se declara una herencia virtual en C++?
La declaración de una herencia virtual en C++ se realiza mediante la palabra clave virtual en la lista de
herencia.
class BaseClass {
};
class DerivedClass1 : virtual public BaseClass {
// Herencia virtual de BaseClass
};
q) ¿Cuál es la ventaja de utilizar la herencia virtual en C++?
• La ventaja de utilizar la herencia virtual en C++ es que resuelve el problema de la herencia múltiple
al evitar la creación de instancias redundantes de la clase base. Esto ayuda a evitar problemas de
ambigüedad y reduce el tamaño de la jerarquía de clases.
r) Proporciona un ejemplo de uso de la herencia virtual en C++.
Ejemplo de uso de la herencia virtual en C++:
#include <iostream>
class Shape {
public:
virtual void draw() {
std::cout << "Drawing shape" << std::endl;
}
};
13
SESIÓN N° 07: Clases Bases y Clases Derivadas, Miembros Protected, Constructores y Destructores en Clases Derivadas,
Herencia Public, Protected y Private en C++
int main() {
SquareCircle obj;
obj.draw(); // Salida: "Drawing square"
return 0;
}
9. BIBLIOGRAFÍA
1. Deitel, Paul J., Deitel, Harvey M., "Cómo Programar en C++", 6ta Edición, Ed. Pearson Educación, México
2009.
2. Stroustrup, Bjarne, "El Lenguaje de Programación C++", 3ra Edición, Adisson Pearson Educación S.A.,
Madrid 2002.
3. Eckel, Bruce, "Thinking in C++", 2da Edición, Prentice Hall, 2000.
14