Clases y Memoria Dinámica
Un ejemplo de uso de clases y memoria dinámica en C++
This commit is contained in:
parent
cdaa11dc94
commit
e7d99b54d9
71
Clases y memoria dinámica/ListaPersonas.cpp
Normal file
71
Clases y memoria dinámica/ListaPersonas.cpp
Normal file
@ -0,0 +1,71 @@
|
||||
#include "ListaPersonas.h"
|
||||
using namespace std;
|
||||
|
||||
void iniciar(tListaPersonas& lista) {
|
||||
lista.capacidad = 2;
|
||||
lista.contador = 0;
|
||||
lista.persona = new Persona * [lista.capacidad]; //Crea una lista de punteros (que en un futuro, apuntarán cada uno a "tPersona").
|
||||
}
|
||||
|
||||
void ampliar(tListaPersonas& lista) {
|
||||
lista.capacidad *= 2;
|
||||
Persona** aux = new Persona * [lista.capacidad];
|
||||
|
||||
for (int i = 0; i < lista.contador; i++) {
|
||||
aux[i] = lista.persona[i];
|
||||
}
|
||||
|
||||
delete[] lista.persona;
|
||||
lista.persona = aux;
|
||||
}
|
||||
|
||||
void liberar(tListaPersonas& lista) {
|
||||
for (int i = 0; i < lista.contador; i++) {
|
||||
delete lista.persona[i];
|
||||
}
|
||||
|
||||
delete[] lista.persona;
|
||||
}
|
||||
|
||||
void agregar(tListaPersonas& lista) {
|
||||
string nombre, apellidos, NIF, edad;
|
||||
|
||||
do {
|
||||
if (lista.contador == lista.capacidad) { ampliar(lista); }
|
||||
cout << "Introduzca nombre de persona: " << endl;
|
||||
getline(cin, nombre);
|
||||
cout << "Introduzca apellidos: " << endl;
|
||||
getline(cin, apellidos);
|
||||
cout << "Introduzca NIF: " << endl;
|
||||
getline(cin, NIF);
|
||||
cout << "Introduzca edad: " << endl;
|
||||
getline(cin, edad);
|
||||
lista.persona[lista.contador] = new Persona(nombre, apellidos, NIF, edad);
|
||||
lista.contador++;
|
||||
cout << "Pulse 'ESC' para SALIR, 'ENTER' para continuar..." << endl;
|
||||
} while (!salir());
|
||||
}
|
||||
|
||||
void mostrar(tListaPersonas& lista) {
|
||||
cout << setw(10) << right << "NOMBRE" << setw(20) << "APELLIDOS" << setw(20) << "NIF" << setw(15) << "EDAD" << endl;
|
||||
cout << setw(75) << setfill('=') << "\n" << setfill(char(0));
|
||||
for (int i = 0; i < lista.contador; i++) {
|
||||
lista.persona[i]->mostrar();
|
||||
cout << endl;
|
||||
}
|
||||
}
|
||||
|
||||
bool salir() {
|
||||
int tecla = 27;
|
||||
bool ESC = false;
|
||||
|
||||
cin.sync();
|
||||
tecla = _getch();
|
||||
if (tecla != 0xe0) {
|
||||
if (tecla == 27) {
|
||||
ESC = true;
|
||||
}
|
||||
}
|
||||
|
||||
return ESC;
|
||||
}
|
27
Clases y memoria dinámica/ListaPersonas.h
Normal file
27
Clases y memoria dinámica/ListaPersonas.h
Normal file
@ -0,0 +1,27 @@
|
||||
#ifndef _LISTA
|
||||
#define _LISTA
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <conio.h>
|
||||
#include "persona.h"
|
||||
|
||||
//Constantes:
|
||||
|
||||
//Tipos:
|
||||
typedef struct tListaPersonas {
|
||||
Persona** persona;
|
||||
int contador;
|
||||
int capacidad;
|
||||
};
|
||||
|
||||
//Funciones:
|
||||
void iniciar(tListaPersonas&); //Inicializa una lista dinámica de la clase Persona, con un contador a '0' y una capacidad inicial de '2'.
|
||||
void ampliar(tListaPersonas&); //Amplia la lista en caso de que se alcance la capacidad máxima.
|
||||
void liberar(tListaPersonas&); //Libera la memoria dinámica.
|
||||
void agregar(tListaPersonas&); //Método para agregar una nueva persona a la lista.
|
||||
void mostrar(tListaPersonas&); //Muestra la lista de personas.
|
||||
bool salir(); //Lee una tecla, devuelve true si la tecla es "ESC".
|
||||
|
||||
#endif // !_LISTA
|
||||
|
12
Clases y memoria dinámica/checkML.h
Normal file
12
Clases y memoria dinámica/checkML.h
Normal file
@ -0,0 +1,12 @@
|
||||
#ifdef _DEBUG
|
||||
#define _CRTDBG_MAP_ALLOC
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <crtdbg.h>
|
||||
|
||||
#ifndef DBG_NEW
|
||||
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
|
||||
#define new DBG_NEW
|
||||
|
||||
#endif
|
||||
#endif
|
18
Clases y memoria dinámica/main.cpp
Normal file
18
Clases y memoria dinámica/main.cpp
Normal file
@ -0,0 +1,18 @@
|
||||
#include "ListaPersonas.h"
|
||||
#include "checkML.h"
|
||||
|
||||
|
||||
int main() {
|
||||
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); //Detecta posibles fugas de memoria.
|
||||
|
||||
tListaPersonas personas;
|
||||
|
||||
iniciar(personas);
|
||||
|
||||
agregar(personas);
|
||||
mostrar(personas);
|
||||
system("PAUSE");
|
||||
|
||||
liberar(personas);
|
||||
return 0;
|
||||
}
|
25
Clases y memoria dinámica/persona.cpp
Normal file
25
Clases y memoria dinámica/persona.cpp
Normal file
@ -0,0 +1,25 @@
|
||||
#include "persona.h"
|
||||
using namespace std;
|
||||
|
||||
Persona::Persona() {
|
||||
_nombre = "Empty";
|
||||
_apellidos = "NULL NULL";
|
||||
_NIF = "NULL";
|
||||
_edad = "0";
|
||||
}
|
||||
|
||||
Persona::Persona(std::string nombre, std::string apellidos, std::string NIF, std::string edad){
|
||||
_nombre = nombre;
|
||||
_apellidos = apellidos;
|
||||
_NIF = NIF;
|
||||
_edad = edad;
|
||||
}
|
||||
|
||||
|
||||
void Persona::mostrar() {
|
||||
cout << setw(10) << right
|
||||
<< this->_nombre << setw(20)
|
||||
<< this->_apellidos << setw(20)
|
||||
<< this->_NIF << setw(15)
|
||||
<< this->_edad;
|
||||
}
|
24
Clases y memoria dinámica/persona.h
Normal file
24
Clases y memoria dinámica/persona.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef _Persona
|
||||
#define _Persona
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <iomanip>
|
||||
|
||||
class Persona{
|
||||
public:
|
||||
//Constructoras:
|
||||
Persona();
|
||||
Persona(std::string, std::string, std::string, std::string);
|
||||
|
||||
//Métodos públicos:
|
||||
void mostrar(); //Muestra los atributos de una persona.
|
||||
|
||||
private:
|
||||
//Atributos:
|
||||
std::string _nombre, _apellidos, _NIF, _edad;
|
||||
|
||||
//Métodos privados:
|
||||
};
|
||||
|
||||
#endif // !_Persona
|
Loading…
Reference in New Issue
Block a user