• No se han encontrado resultados

Clase 1 Clase 2 Clase derivada

N/A
N/A
Protected

Academic year: 2022

Share "Clase 1 Clase 2 Clase derivada"

Copied!
5
0
0

Texto completo

(1)

PRÁCTICA 7

ANÁLISIS Y DISEÑO DE PROGRAMAS (Herencia múltiple)

Objetivos

1. El alumno conocerá las características de la herencia múltiple.

2. Conocerá las sintaxis para el manejo de constructores con herencia múltiple.

3. Solucionará problemas utilizando herencia múltiple.

En la herencia múltiple se usan dos o más clases base para derivar una clase. Es decir, la clase derivada comparte los atributos y los métodos de más de una clase como se ve en la Ilustración 1.

Para definir una relación de herencia múltiple se utiliza la sintaxis expuesta en la Ilustración 2:

class Base1 {

// Declaración de atributos y métodos de la clase Base1 };

class Base2 {

// Declaración de atributos y métodos de la clase Base2 };

class Derivada : public Base1, public Base2 {

// Declaración de atributos y métodos de la clase Derivada };

Clase 1 Clase 2

Clase derivada

Ilustración 1. Herencia múltiple

Ilustración 2.Sintaxis herencia múltiple

(2)

El constructor de la clase “Derivada”, se define como se ve en la Ilustración 3.

Al llamar al constructor de la clase Derivada, primero se ejecuta el constructor de la clase Base1, después el constructor de la clase Base2, y así sucesivamente hasta el constructor de la clase Base n. Por último, se ejecutan las instrucciones que aparezcan en el cuerpo del constructor de la clase Derivada.

En la Ilustración 3 se muestra un ejemplo de herencia múltiple.

Ilustración 3.Constructor herencia múltiple Derivada :: Derivada (parámetros) :

Base1 (parámetros propios de la clase Base1), Base2 (parámetros propios de la clase Base2) {

// Cuerpo del constructor de la clase Derivada }

#include <iostream>

#include <string.h>

using namespace std;

class Boleto // Clase Base Boleto {

private:

float Precio;

char Numero[64], CiudadOrigen[64], CiudadDestino[64];

public:

// Funciones Miembro

Boleto( ){ }; // constructor por defecto

Boleto(float, char *, char *, char *); // constructor con parámetros void imprimirdatos( );

};

// Declaración del constructor con parámetros

Boleto :: Boleto(float Prec, char Num[], char CO[], char CD[]) {

Precio = Prec;

strcpy(Numero, Num);

strcpy(CiudadOrigen, CO);

strcpy(CiudadDestino, CD);

}

// Método que despliega los valores de los atributos de un boleto void Boleto :: imprimirdatos( )

{

cout << endl << endl;

cout << "--- Imprimir los Datos del Boleto ---" << endl;

cout << "Numero del boleto : " << Numero << endl;

cout << "Precio : $ " << Precio << endl;

cout << "De la ciudad: " << CiudadOrigen << " a la ciudad: " << CiudadDestino <<

endl;

}

(3)

class Hotel // Clase Base Hotel {

private:

float PrecioHab;

int NumHab;

char TipoHab[10];

public:

// Funciones Miembro

Hotel( ){ }; // constructor por defecto

Hotel(float, int, char *); // constructor con parámetros void imprimirdatos( );

};

// Declaración del constructor con parámetros Hotel :: Hotel(float PrecH, int NH, char TH[ ]) {

PrecioHab = PrecH;

NumHab = NH;

strcpy(TipoHab, TH);

}

// Método que despliega los valores de los atributos de un hotel void Hotel :: imprimirdatos( )

{

cout << endl << endl;

cout << "--- Imprimir los Datos de la Habitacion del Hotel ---" << endl;

cout << "Numero de Habitacion: " << NumHab << endl;

cout << "Precio : $ " << PrecioHab << endl;

cout << "Tipo de Habitacion: " << TipoHab << endl;

}

/* Definición de la Clase PlanVacac como clase derivada de las clases Boleto y Hotel.

Esta clase hereda los atributos de las otras dos. Además tiene dos atributos propios */

class PlanVacac : public Boleto, public Hotel {

private:

char Descripcion[80];

int TotalDias;

public:

PlanVacac( ){ }; // constructor por defecto // constructor con parámetros

PlanVacac(float, char *, char *, char *, float, int, char *, char *, int);

void imprimirdatos( );

};

// Declaración del constructor con parámetros

PlanVacac :: PlanVacac(float PB, char NB[ ], char CO[ ], char CD[ ], float PH, int NH, char TH[ ], char Desc[ ], int TD) : Boleto(PB, NB, CO, CD), Hotel(PH, NH, TH) {

strcpy(Descripcion, Desc);

TotalDias = TD;

(4)

void PlanVacac :: imprimirdatos( ) {

cout << endl << endl;

cout << "--- Imprimir los Datos del Plan Vacacional ---" << endl;

cout << "Descripcion: " << Descripcion << endl;

cout << "Total de Dias: " << TotalDias << endl;

Boleto :: imprimirdatos( );

Hotel :: imprimirdatos( );

}

PlanVacac Lee() /* Función que solicita al usuario los datos relacionados a un viaje.

Con estos datos se crea un objeto de tipo PlanVacac. Regresa como resultado dicho objeto */

{

/* variables auxiliares: CO = ciudad origen, CD = ciudad destino, NumBol = número del boleto de avión, TH = tipo de habitación, Desc = Descripción del plan vacacional, Prec = precio del boleto, PrecHab = precio de la habitación, NumHab = número de habitación, TD = total de días del plan */

char CO[64], CD[64], NumBol[64], TH[10], Desc[80];

float Prec, PrecHab;

int NumHab, TD;

cout << "De que ciudad sale? ";

gets(CO);

cout << "A que ciudad llega? ";

gets(CD);

cout << "Precio del Boleto: ";

cin >> Prec;

fflush(stdin); // para liberar buffer de memoria cout << "Numero de Boleto: ";

gets(NumBol);

cout << "Tipo de Habitacion: ";

gets(TH);

cout << "Precio de la Habitacion: ";

cin >> PrecHab;

cout << "Numero de habitacion asignada: ";

cin >> NumHab;

fflush(stdin);

cout << "Tipo de Paquete: ";

gets(Desc);

cout << "Total de Dias: ";

cin >> TD;

PlanVacac Paquete(Prec, NumBol, CO, CD, PrecHab, NumHab, TH, Desc, TD);

return Paquete;

}

int main() {

PlanVacac Viaje; // Se crea obbjeto de tipo PlanVacac

Viaje = Lee( ); /* Se le proporcionan valores a todos los datos miembros del objeto de tipo PlanVacac */

Viaje.imprimirdatos( );

system("pause>nul");

return 0;

}

(5)

Referencia.

Programación II. Guía 9, Recuperado el 10 de noviembre de 2015 de:

http://www.udb.edu.sv/udb/archivo/guia/informatica-ingenieria/programacion-ii/2013/i/guia-9.pdf

Referencias

Documento similar

 • En el caso de un objeto de clase derivada, primero se invoca al constructor de la clase base y luego al de la clase derivada (que puede llamar a constructores de objetos miembro).

El interés por el tema elegido para esta investigación se dio con el fin de hacer un aporte a la didáctica del Francés Lengua Extranjera (FLE) y generar una nueva propuesta

Como es obvio, en clase de música aprendemos contenidos musicales sobre diferentes y variados temas: géneros musicales, historia de la música, instrumentos, la

conquista en una línea de tiempo y las acciones que se llevaron a cabo para que la corona española cumpliera sus objetivos (incorporación de nuevos.. territorios, evangelización

La oxidación de algunos aceites de sulfuro durante el whirlpool podría causar aromas a ajo y cebolla en la cerveza. La oxidación de otros aceites podría generar aromas de

¿Qué es lo primero que haces cuando llegas a casa después de tu última clase.. Lo primero que hago es

PROGRAMACIÓN DOCENTE DE LA FACULTAD DE TURISMO - CURSO ACADÉMICO 2020-2021.. HORARIOS DE CLASE

Cada producto láser (excepto de la clase 1, no es obligatorio el uso de etiqueta) debe poseer en una etiqueta explicativa informando sobre la clase a la que pertenece el láser y