You are on page 1of 3

Programación en C++

Calificaciones
Ejemplo del uso de arreglos dinámicos 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 objetos 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 ejecución.

#include <iostream.h>

#define CAL 5 //Define constante

class alumno
{
char nombre[50];
float
calificaciones[CAL];
public:

ingresar(); // Rellenar nuevo objeto


mostrar_nombre(); // Muestra el nombre
reporte(); // Muestra las notas
};

alumno::ingresar() //Ingresa los datos


{
cout <<"Ingrese el Nombre -> ";
cin >> nombre;
int i;
for (i=0;i<CAL;i++)
{
cout << "Por favor ingrese la calificación No " << i; cout <<" ";
cin >> calificaciones[i];
}

alumno::mostrar_nombre()
{
cout << nombre; //Escribe el nombre en la pantalla
}

alumno::reporte() //Genera reporte del estudiante


{
int i;
for (i=0;i<CAL;i++)
{
cout << "Nota numero " << i;
cout << ": ";
cout << calificaciones[i];
cout << "\n";
}
}
main()
{

int num_est=0; //Numero del objeto en el vector


int numero_objeto=0; //Apuntador del número del objeto
int opcion; //Opción del menú
char nom[50]; //Arreglo de 50 caracteres para el nombre
int i=0; //Auxiliar
int n=0; //Opción en el menú
int dim; //Dimensión del arreglo de objetos
alumno *p; //Crea un puntero a objeto alumno
alumno *aux; //Puntero auxiliar tipo alumno (Solo por ejemplo
//pero no es necesario)
cout << "Cuantos alumnos tiene la clase? ";
cin >> dim; //Para cuantos objetos hay que liberar memoria?
cout << "\n";

p = new alumno[dim]; //Asigna memoria dinámicamente

if (p==0) //Si p=0 no hay memoria suficiente


{
cout << "Error no hay suficiente memoria";
return 0; //Sale del programa
};

aux=p; //Asignación de un puntero a otro del mismo tipo

do //estructura do...while
{ //que mantiene en el ciclo principal

cout << " \n";


cout << "Escoja una opcion. \n";
cout << "1-Nuevo estudiante \n";
cout << "2-Ver lista de estudiantes inscritos \n";
cout << "3-Reporte de un estudiante \n";
cout << "Otra tecla para salir \n";
cin >> opcion;
switch (opcion)
{
case 1:
(p+numero_objeto) -> ingresar(); //operador flecha en vez de operador
//punto
numero_objeto++;
break;
case 2:
cout <<"\n";
cout <<"Lista de Estudiantes inscritos \n";
for (i=0;i<numero_objeto;i++)
{
cout << "Estudiante numero " << i;
cout << ": ";
(aux+i) -> mostrar_nombre();
cout << "\n";
}
break;
case 3:
cout << "Ingrese el número de lista del estudiante a examinar \n";
cin >> n;
cout << "Alumno: ";
(p+n) ->mostrar_nombre();
cout << "\n";
(p+n) -> reporte();
break;
default:
return 0; //Sale del programa
}
}

while (opcion !=4); //sale del programa

delete [] p; //libera la memoria asignada a *p

Ing. Carlos Fernando Jiménez Pugliese


Bucaramanga Noviembre 27 de 2002

carlosfjimenez@latinmail.com
charlytospage@yahoo.com.mx
http://geocities.com/charlytospage

You might also like