Вы находитесь на странице: 1из 8

Programacin II.

Gua 5

Facultad:
Ingeniera
Escuela:
Computacin
Asignatura: Programacin II

Tema: Arreglos de Objetos en C++.


Objetivos Especficos

Describir la implementacin de arreglos de Objetos.

Implementar programas en C++ que incluyan el uso de Arreglos de Objetos.

Materiales y Equipo
Computadora con el software DevC++
Gua Nmero 5

Introduccin Terica
Arreglo de objetos.
La funcin bsica de un arreglo es almacenar en una variable ms de un valor de un mismo
tipo de dato, por ejemplo la siguiente declaracin int numero [5]; permite almacenar en la
variable numero, 5 valores enteros.
En las clases el concepto de arreglos es el mismo, con la diferencia que ahora se almacenarn
objetos de una clase o de diferentes clases.
Los objetos se pueden estructurar como un array. Los objetos son variables y tienen las
mismas capacidades y atributos que cualquier tipo de variables, por tanto es posible disponer
objetos en un array.
La sintaxis es exactamente igual a la utilizada para declarar y acceder al array. Tambin
disponemos de arrays bidimensionales.
Cuando se crea un array de objetos stos se inicializan llamando al constructor sin
argumentos. Por consiguiente, siempre que se prevea organizar los objetos en un array, la
clase debe tener un constructor que pueda llamarse sin parmetros.

Programacin II, Gua 5

La sintaxis para declarar un arreglo de objetos es la siguiente:


<nombre de clase> <nombre del arreglo > [<numero de elementos>];
<nombre_clase> <nombre del arreglo> [<numero de elementos>] = {elementos};
Ejemplo para crear dos objetos de la clase celular:
celular aCell [2];
Inicializacin:
nombre del arreglo [ndice].funcin(valores);

Creacin de objetos en forma dinmica.


New y Delete.
En C++ se puede asignar memoria utilizando el operador new y liberarse mediante el
operador delete. Estos operadores no se pueden combinar unos con otros, es decir debe
llamarse a delete solo con un puntero obtenido mediante new.
Los objetos tambin se les puede pasar un valor inicial con la sentencia new.
SINTAXIS:
<nombre del puntero >= new <tipo de dato>;
delete <nombre del puntero>;
<nombre del puntero> = new <tipo de dato> (valor inicial);
Tambin se pueden crear arreglos de objetos asignados dinmicamente, estos arrays
pueden utilizar la sentencia new.
La sintaxis general es:
DECLARACIN DEL ARRAY:
<nombre del puntero >= new <tipo de dato> [<numero de elementos>];
puntero = new tipo[tamao];
Ejemplo de un arreglo creado en forma dinmica:
#include<iostream>
using namespace std;

Programacin II. Gua 5 3


int main( )
{ int *p;
int i;
p = new int[5];

// Se declara el puntero
/* al puntero se le asigna la memoria en forma dinmica y se crea el
arreglo */

system(cls);
if (!p)
// Se verifica que exista el puntero
{ cout<<Error de asignacion\n;
exit(1);
}
for (i = 0; i < 5; i++)
p[i] = i+1;

// Para introducir datos al arreglo

for (i = 0; i < 5; i++)


// Para mostrar los datos del arreglo
{ cout<<Este es el entero en p[<<i<<]:;
cout<<p[i]<<\n;
}
delete[ ] p;
// Se libera la memoria reservada
system(pause);
}

Procedimiento
Ejemplo 1:
En el siguiente programa se muestra el uso de arreglos dinmicos de objetos usando NEW y
DELETE
El programa crea una clase denominada alumno, la cual contiene un arreglo para el nombre
del alumno y un arreglo para sus notas. A partir de esta clase se crea un puntero al
objeto alumno y a partir de este puntero se libera memoria para un arreglo de objetos
alumno por medio de NEW y el puntero a objeto para incluir todos los alumnos de una
clase en tiempo de ejecucin.
#include <iostream>
#include <iomanip>
using namespace std;
#define CAL 5 // Define constante para el numero de calificaciones a manejar
class Alumno
{
private:

// Definicin de la clase

Programacin II, Gua 5


char nombre[50];
float calificaciones[CAL];
public:
Alumno( ){ };
~Alumno( ){ };
void ingresar( );
void mostrar_nombre( );
void reporte( );

// Funcin set
// Muestra el nombre del alumno
// Muestra las notas del alumno

};
void Alumno::ingresar( )
//Ingresa los datos de un alumno
{ fflush(stdin);
cout <<"Ingrese el Nombre del estudiante : ";
gets(nombre);
int i;
for (i = 0; i < CAL; i++)
{ cout << "Por favor ingrese la calificacion No. " << i+1; cout <<" : ";
cin >> calificaciones[i+1];
}
}
void Alumno::mostrar_nombre()
{ cout << nombre;
//Escribe el nombre del alumno en la pantalla
}
void Alumno::reporte()
{ int i;

//Genera reporte del estudiante seleccionado

cout<<"------------------------------------------------------"<<endl;
// Se le da formato a la tabla.
for (i = 0; i < CAL; i++)
{ cout<<setw(15)<<"Nota "<<i+1<<" : "<<calificaciones[i+1]<<setw(5)<<endl;
}
}
int main( )
{ int num_est = 0;
int numero_objeto = 0;
int opcion;
char nom[50];
int i=0;
int n=0;
int dim;
Alumno *p;

// Nmero del objeto en el vector


// Apuntador del nmero del objeto
// Opcin del men
// Arreglo de 50 caracteres para el nombre
// Auxiliar
// Opcin en el men
// Dimensin del arreglo de objetos
// Crea un puntero a objeto alumno

cout << "Cuantos alumnos tiene la clase? ";


cin >> dim;
//Para cuantos objetos hay que reservar memoria?

Programacin II. Gua 5 5


cout << "\n";
p = new Alumno[dim];

/* Asigna memoria dinmicamente y se crea el arreglo de tipo


Alumno */

if (p == 0)
{ cout << "Error no hay suficiente memoria";
return 0;
};

//Si p = 0 no hay memoria suficiente


//Sale del programa

do
//estructura do...while que mantiene en el ciclo principal
{
cout<<"
Menu"<<endl;
cout<<" 1. Ingresar datos de un nuevo estudiante. (Nombre y notas)"<<endl;
cout<<" 2. Ver lista de estudiantes inscritos."<<endl;
cout<<" 3. Reporte de un estudiante."<<endl;
cout<<" 4. Salir."<<endl;
cout<<"------------------------------------------------"<<endl;
fflush(stdin);
cout<<"\n Elija una opcion del menu (1-4): ";
cin>>opcion;
switch (opcion)
{
case 1:
(p+numero_objeto) -> ingresar( ); //operador flecha en vez de operador punto
numero_objeto++;
system("cls");
break;
case 2:
cout <<"\n";
cout<<"------------------------------------------------------"<<endl;
cout<<"
LISTADO DE ESTUDIANTES INSCRITOS
cout<<"------------------------------------------------------"<<endl;

"<<endl;

for (i=0;i<numero_objeto;i++)
{ cout << "Estudiante numero " << i+1;
cout << ": ";
(p+i) -> mostrar_nombre( );
cout << "\n";
}
cout<<endl;
system("pause");
system("cls");
break;
case 3:
cout << "Ingrese el numero de lista del estudiante a generar el reporte: ";
cin >> n;
if ( n > 0)

Programacin II, Gua 5


{ cout<<"------------------------------------------------------"<<endl;
cout<<" ALUMNO: ";
(p+n-1) -> mostrar_nombre( );
cout<<endl<<endl;
cout<<" NOTAS OBTENIDAS ";
cout << "\n";
(p+n-1) -> reporte( );
cout<<"------------------------------------------------------"<<endl;
}
else
cout<<"Digite un codigo de alumno valido "<<endl;
cout<<endl;
system("pause");
system("cls");
break;
case 4:
break;
default:
cout<<"\n\n Ingrese una opcion valida del menu.\n";
system("pause");
system("cls");

}
}
while (opcion != 4); //sale del programa
delete [ ] p; //libera la memoria asignada a *p
}

Anlisis de Resultados
Ejercicio 1:
Tomar el cdigo anterior como referencia y realizar los cambios que sean necesarios para
crear un programa que simule un sistema de control de notas.
Considere que cada alumno puede cursar como mximo 5 asignaturas por ciclo. Para cada
asignatura se deben considerar notas por cada perodo (el ciclo est formado por 3 perodos) y
una nota final de laboratorio. Las notas deben promediarse para obtener una nota global por
materia, considerando los siguientes porcentajes por perodo (1: 30%; 2: 35% y 3: 35%),

Programacin II. Gua 5 7


adems debe considerarse que la parte terica tiene una ponderacin del 60% y el laboratorio
del 40 %.
El programa debe tener un men con las siguientes opciones:
Opcin de men 1: Ingresar datos de los alumnos y las asignaturas.
Opcin de men 2: Mostrar los datos de un alumno en particular, haciendo uso del miembro
carnet. A partir de los datos introducidos debe mostrarse adems, la nota promedio de cada
asignatura, indicar si la materia est Aprobada Reprobada.
Opcin de men 3: Salir del programa.
El men deber estar siempre activo, en la misma posicin en pantalla, hasta que el usuario
seleccione la opcin salir.

Investigacin Complementaria
1. Investigue cuales son los usos mas comunes de punteros a objetos en C++.
2. Qu es el puntero this. Utilizacin en C++.
3. Utilidad de las clases amigas en C++. Incluir ejemplos de su uso.

Programacin II, Gua 5

Gua 5: Arreglos de Objetos en C++.

Alumno:

Hoja de cotejo:

Mquina No:

Docente:

GL:

Fecha:

Docente:

EVALUACIN
%
CONOCIMIENTO

Del 20
al 30%

APLICACIN
DEL
CONOCIMIENTO

Del 40%
al 60%

1-4

5-7

8-10

Conocimiento
deficiente de
los fundamentos
tericos

Conocimiento
y explicacin
incompleta de
los
fundamentos
tericos

Conocimiento
completo y
explicacin
clara de los
fundamentos
tericos

No tiene
actitud
proactiva.

Actitud
propositiva y
con
propuestas no
aplicables al
contenido de
la gua.

Tiene actitud
proactiva y
sus
propuestas
son
concretas.

ACTITUD
Del 15%
al 30%

TOTAL

100%

Nota

Вам также может понравиться