Está en la página 1de 4

Implementacin de Vectores de Objetos en C++

El siguiente ejemplo permite almacenar en un vector, objetos de la clase Estudiantes. Para


esto se declara la clase Estudiantes con sus atributos (cdigo, nombre y nota) y la clase en
donde se declara el vector.

Fichero estudiantes.h

#ifndef ESTUDIANTES_H
#define ESTUDIANTES_H
#include <iostream>
using namespace std;
class Estudiantes
{
private:
int codigo;
string nombre;
double nota;
public:
Estudiantes(); //Mtodo constructor por defecto de la clase Estudiantes.
//Mtodo constructor pasando los atributos de la clase como parmetro.
Estudiantes(int cod, string nom, double n);
//Mtodos modificadores para los atributos de la clase Estudiantes.
void setCodigo(int cod);
void setNombre(string nom);
void setNota(double n);
//Mtodos selectores para los atributos de la clase Estudiantes.
int getCodigo();
string getNombre();
double getNota();
virtual ~Estudiantes(); //Mtodo destructor de la clase.
};

Fichero estudiantes.cpp

#include "estudiantes.h"
#include <iostream>
using namespace std;
Estudiantes::Estudiantes() //Se asignan los valores iniciales a los atributos de la clase Estudiantes.
{
codigo = 0;
nombre = "";
nota = 0;
}
Estudiantes::Estudiantes(int cod, string nom, double n){ //Se pasan por parmetro los valores de los atributos.
codigo = cod;
nombre = nom;
nota = n;
}
Estudiantes::~Estudiantes()
{
//dtor
}
void Estudiantes::setCodigo(int cod){
codigo = cod;
}
void Estudiantes::setNombre(string nom){
nombre = nom;
}
void Estudiantes::setNota(double n){
nota = n;
}
int Estudiantes::getCodigo(){
return codigo;
}
string Estudiantes::getNombre(){
return nombre;
}
double Estudiantes::getNota(){
return nota;
}

Fichero declararvectorobjetos.h

#ifndef DECLARARVECTOROBJETOS_H
#define DECLARARVECTOROBJETOS_H
#include "estudiantes.h"
class DeclararVectorObjetos
{
private:
int tamano; //Se define un atributo para asignar el tamao que tendr el vector.
Estudiantes* vectorEstudiantes;
//Estudiantes vectorEstudiantes[20]; Esta seria forma de declarar el vector de objetos con tamao fijo.
void limpiar();
public:
DeclararVectorObjetos();
virtual ~DeclararVectorObjetos();
//Mtodos modificadores y selectores para asignar y obtener el tamao del vector.
void setTamano(int N);
int getTamano();
//Mtodos modificadores y selectores para agregar informacin al vector y obtener elementos del vector.
//Se pasan como parmetros la posicin (dato entero) y un objeto de la clase Estudiantes (ve).
void setVectorEstudiantes(int p, Estudiantes ve);
Estudiantes getVectorEstudiantes(int p); //El mtodo devuelve un objeto de la clase Estudiantes.
};
Fichero declararvectorobjetos.cpp

#include <iostream>
#include "estudiantes.h"
#include "declararvectorobjetos.h"
using namespace std;

DeclararVectorObjetos::DeclararVectorObjetos()
{
tamano = 0;
vectorEstudiantes = NULL;
}

DeclararVectorObjetos::~DeclararVectorObjetos()
{
//dtor
}
void DeclararVectorObjetos::limpiar(){
if (tamano > 0){
tamano = 0;
delete []vectorEstudiantes; //Las llaves se utilizan siempre que el objeto a eliminar sea de tipo vector.
}
}
void DeclararVectorObjetos::setTamano(int N){
tamano = N;
if (N > 0){
//Se asigna el tamao y se declara el vector de objetos de la clase Estudiantes en tiempo de ejecucin.
vectorEstudiantes = new Estudiantes[N];
}
}
int DeclararVectorObjetos::getTamano(){
return tamano;
}
void DeclararVectorObjetos::setVectorEstudiantes(int p, Estudiantes ve){
vectorEstudiantes[p] = ve;
}
Estudiantes DeclararVectorObjetos::getVectorEstudiantes(int p){
return vectorEstudiantes[p];
}

Fichero main.cpp

#include <iostream>
#include "estudiantes.h"
#include "declararvectorobjetos.h"
using namespace std;

//Se define el mtodo PedirDatos al cual se le pasa un parmetro (est) por referencia.
void PedirDatos(Estudiantes *est);

int main(){
int tam;
Estudiantes est; //Se declara un objeto esttico de la clase Estudiantes.
//A continuacin se declara un objeto (obj) con apuntador (*) de la clase DeclararVectorObjetos para esto
//Se utiliza el operador new.
DeclararVectorObjetos* obj=new DeclararVectorObjetos();
cout << "________________________________________________ \n";
cout << "\n DIGITE EL NUMERO DE ELEMENTOS DEL VECTOR \n";
cout << "________________________________________________ \n \n";
cout << "Cuantos elementos tendra en vector: ";
cin >> tam;
obj->setTamano(tam);
cout << "________________________________________________ \n";
cout << "\nDIGITE LOS VALORES DE LOS ELEMENTOS DEL VECTOR \n";
cout << "________________________________________________ \n \n";
for(int i=0; i<=obj->getTamano()-1; i++){
cout << "-------> Informacion del Estudiante " << i+1 << "\n";
//Se llama a el mtodo PedirDatos (ver implementacin debajo) que asigna los valores a los atributos
//de la clase Estudiantes dentro del objeto est. Aqu se pasa el objeto est precedido del smbolo "&" (&est)
//para indicar que se pasa por referencia y toma la direccin de memoria en donde se almacenaron los valores
//de cada atributo de la clase Estudiantes (codigo, nombre y nota).
PedirDatos(&est);
//El objeto obj accede a los mtodos de la clase DeclararVectorObjetos usando apuntador (->).
obj->setVectorEstudiantes(i, est);
cout << "\n";
}
cout << "\n";
cout << "________________________________________________ \n";
cout << "\n DATOS DEL VECTOR ESTUDIANTES \n";
cout << "________________________________________________ \n \n";
for (int i=0; i<=obj->getTamano()-1; i++){
cout << "CODIGO: " << obj->getVectorEstudiantes(i).getCodigo() << " NOMBRE: " << obj-
>getVectorEstudiantes(i).getNombre() << " NOTA: " << obj->getVectorEstudiantes(i).getNota() << "\n";
}
cout << "\n";
} //Fin del main

//Se pasa el objeto est de la clase Estudiantes como parmetro por referencia, es decir se pasa como puntero
//(*est) para asignar una direccin de memoria en donde se almacenaran los 3 datos de la clase Estudiantes,
//esto permite tomar la informacin del objeto est en cualquier parte del programa. Este mtodo asigna los
//valores a cada atributo de la clase Estudiantes (codigo, nombre y nota), los almacena en el objeto est y los
//guarda en la memoria.
void PedirDatos(Estudiantes *est){
int cod;
string nom;
double n;
cout<<"Digite Codigo del Estudiante: ";
cin>>cod;
cout<<"Digite Nombre del Estudiante: ";
cin>>nom;
cout<<"Digite Nota del Estudiante: ";
cin>>n;
//Como el objeto est es de tipo apuntador (*) se accede a los mtodos modificadores de la clase Estudiantes
//utilizando apuntadores (->).
est->setCodigo(cod);
est->setNombre(nom);
est->setNota(n);
}

También podría gustarte