Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 Guía Programación I
Objetivos Específicos
Materiales y Equipo
Introducción Teórica
Arreglo de
objetos.
La función básica de un arreglo es almacenar en una variable más de un valor de un
mismo tipo de dato, por ejemplo la siguiente declaración 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
almacenarán 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. También
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 parámetros.
2 Guía Programación I
Inicialización:
nombre del arreglo [índice].función(valores);
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 también se les puede pasar un valor inicial con la sentencia new.
SINTAXIS:
#include<iostream>
int main( )
{ int *p; // Se declara el puntero
int i;
p = new int[5]; /* al puntero se le asigna la memoria en forma dinámica y se crea el
arreglo */
system(“cls”);
if (!p) // Se verifica que exista el puntero
{ cout<<”Error de asignacion\n”;
exit(1);
}
Procedimiento
Ejemplo
1:
En el siguiente programa se muestra el 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 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 ejecución.
#include <iostream>
#include <iomanip>
char nombre[50];
float calificaciones[CAL];
public:
Alumno( ){ };
~Alumno( ){ };
void ingresar( ); // Función set
void mostrar_nombre( ); // Muestra el nombre del alumno
void reporte( ); // Muestra las notas del alumno
};
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
}
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; // Número 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
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 "<<endl;
cout<<"------------------------------------------------------"<<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)
{ cout<<"------------------------------------------------------"<<endl;
cout<<" ALUMNO: ";
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
Análisis de Resultados
Ejercicio
1:
Tomar el código 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 máximo 3 asignaturas por ciclo. Para
cada asignatura se deben considerar notas los siguientes porcentajes por período (1º:
30%; 2º: 30% y 3º: 40%).
El programa debe tener un menú con las siguientes opciones:
Opción de menú 1: Ingresar datos de los alumnos y las asignaturas.
Opción de menú 2: Mostrar los datos de un alumno en particular, haciendo uso del miembro “id
carnet”. A partir de los datos introducidos debe mostrarse además, la nota promedio de cada
asignatura, indicar si la materia está “Aprobada” ó “Reprobada”.
Opción de menú 3: Salir del programa.
El menú deberá estar siempre activo, hasta que el usuario seleccione la opción salir.
Investigación Complementaria
1. Investigue cuales son los usos mas comunes de punteros a objetos en C++.
2. Qué es el puntero this. Utilización en C++.
3. Utilidad de las clases amigas en C++. Incluir ejemplos de su uso.