Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamento Teórico:
Creación de objetos en forma dinámica.
Los objetos también 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);
PUNTEROS C++
También se puede desreferenciar un puntero para recuperar el valor del objeto al que
apunta. El operador de acceso a miembros proporciona acceso a los miembros de un
objeto.
NOTACION FLECHA.
Para acceder a cada una de las variables miembro de la clase se utiliza el operador dot o
punto (.), o bien el operador arrow o flecha (->).el operador flecha (->) se utiliza cuando se
dispone de la dirección de un objeto (en el puntero correspondiente), en lugar del nombre
del objeto.
#include<iostream>
using namespace std;
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);
}
for (i = 0; i < 5; i++) // Para introducir datos al arreglo
p[i] = i+1;
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
}
Ejercicio en clase
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
using namespace std;
class Alumno
{
private:
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
};
void Alumno::mostrar_nombre()
{
cout << nombre;
}
void Alumno::reporte()
{
int i;
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
cout << "Cuantos alumnos tiene la clase? ";
cin >> dim; //Para cuantos objetos hay que reservar memoria?
cout << "\n";
p = new Alumno[dim]; /* Asigna memoria dinámicamente y se crea el arreglo de tipo Alumno */
if (p == 0) //Si p = 0 no hay memoria suficiente
{
cout << "Error no hay suficiente memoria";
return 0; //Sale del programa
};
do
{
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 "<<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: ";
(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
}