Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Vector de un tipo en C++

Estas en el tema de Vector de un tipo en C++ en el foro de C/C++ en Foros del Web. Hola, ¿Cómo se declara en C++ un vector de un tipo de objetos de la clase Personas (es decir, vector de Personas)? ¿Y como añadiría ...
  #1 (permalink)  
Antiguo 12/04/2007, 03:23
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años
Puntos: 2
Vector de un tipo en C++

Hola,
¿Cómo se declara en C++ un vector de un tipo de objetos de la clase Personas (es decir, vector de Personas)?
¿Y como añadiría una nueva Persona a dicho vector?
(Cada persona solo almacena en sí un string Nombre)

Muchas gracias
  #2 (permalink)  
Antiguo 12/04/2007, 07:02
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Vector de un tipo en C++

Si hablas de usar la STL por ejemplo te quedaria algo asi:

Código:
vector<persona> vPersonas;
Para agregar una persona seria algo asi:
Código:
vPersonas.push_back(fulano);
Si fueras un poco mas explicito podriamos ayudarte mejor.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #3 (permalink)  
Antiguo 12/04/2007, 13:03
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años
Puntos: 2
Re: Vector de un tipo en C++

Gracias por responder, a ver si me explico mejor. Estoy empezando con C++, por eso no sé como hacer ésto.
Hice una clase Persona, de la que heredan Hombre y Mujer.
Cada subclase tiene un atributo que heredaron de Persona, que se define como string Nombre;

Pido por teclado un nombre, y miro si acaba en A o en O (ya sé que es muy genérico pero es para aprender). Si acaba en A, creo una Mujer. Si acaba en O, creo un Hombre.
Quiero tener dos arrays, uno para almacenar Mujeres y otro para Hombres, y en eses arrays ir metiedo las mujeres y hombres que creo. Y luego, una vez que no se introducen más, mostrarlos por pantalla, de la forma:
"Todas las mujeres son:"
-
-
-...
"Todos los hombres son:"
-
-
-...
(Es decir, imprimir los arrays, que en definitiva será, de cada mujer u hombre, imprimir el nombre)

Espero haberme explicado mejor.
También me gustaría saber que es un método abstracto.
Muchas gracias :)
  #4 (permalink)  
Antiguo 12/04/2007, 13:44
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Información Re: Vector de un tipo en C++

Bueno, tienes varias maneras de hacerlo, una es que uses un arreglo estatico:

Código:
Hombres aHombres[20];
Muejeres aMujeres[20];
int nMujeres=0, nHombres=0;
// lees el nombre
if(esMujer(nombre))
{
   aMujeres[nMujeres++].Nombre=nombre;
   // Asignas las demas propiedades
}
else
{
   aHombres[nHombres++].Nombre=nombre;
   // Asignas las demas propiedades
}
Otra forma es usando la STL, en vez de usar un arreglo estatico usas la plantilla vector (me parece mucho mejor este metodo) y los agregas a medida que los vas leyendo.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #5 (permalink)  
Antiguo 12/04/2007, 14:02
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años
Puntos: 2
Re: Vector de un tipo en C++

Gracias!
Voy a probarlo ya te diré como me va :)
  #6 (permalink)  
Antiguo 12/04/2007, 14:06
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Vector de un tipo en C++

Cita:
Gracias!
De nada! Cualquier duda pregunta de nuevo.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #7 (permalink)  
Antiguo 12/04/2007, 14:56
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años
Puntos: 2
Re: Vector de un tipo en C++

Y otra pregunta, ¿qué es un método abstracto? Por ejemplo, en mi código, qué método abstracto tendría sentido?
  #8 (permalink)  
Antiguo 12/04/2007, 15:24
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años
Puntos: 2
Re: Vector de un tipo en C++

A ver, te cuento, pq me dan muchos errores, y no sé pq :(
Te pongo primero como defino mis clases, a ver si estan mal:

class Personas
{
public:
Personas(string n);
virtual ~Personas();
public:
string nombre;
};
class Mujer:public Personas
{
public:
Mujer(string m);
};

class Hombres:public Personas
{
public:
Hombres(string h);
};

Y te pongo los constructores que tampoco sé si estan bien:

Personas::Personas(string n) { nombre = n; }
Mujer::Mujer(string m):Personas(m){}
Hombres::Hombres(string h):Personas(h){}

Bueno, en el código puse:
Mujer arrayMujer[20];

Y me dan errores:
En la definicion del array me da el error : 'Mujer' no hay un constructor predeterminado adecuado. (tamb. me da para el array de hombres).

No lo entiendo!!!

Gracias por ayudarme

Última edición por CarlaMedina; 12/04/2007 a las 17:03
  #9 (permalink)  
Antiguo 12/04/2007, 20:57
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Vector de un tipo en C++

Con los constructortes como los tienes le estas indicando al compilador que cada vez que crees un objeto le vas a pasar el nombre como parametro:

Código:
Mujer unaMujer("Maria");
Ahora bien, por lo visto esta no es tu intencion, deberias tratar de que tus clases queden mas o menos asi:
Código:
class Personas
{
public:
 Personas();
 virtual ~Personas();
 string nombre;
};

class Mujer:public Personas
{
public:
 Mujer();
};

class Hombres:public Personas
{
public:
 Hombres();
};

Personas::Personas()
{ 
  nombre="";
 //Esto o cualquier otro codigo que quieras
}
Mujer::Mujer():Personas()
{
// codigo de inicializacion de la clase Mujer
}

Hombres::Hombres():Personas()
{
// codigo de inicializacion de la clase hombre
}
Asi ya no te dara el error que mencionas, si no tienes codigo de inicializacion para ninguna de las clases no te hace falta el constructor, si quieres un metodo para asignar los nombres sin acceder directamente al mienbro nombre declara este como privado y crea un metodo que lo haga. si no entendiste esto ultimo no te preocupes mucho, trata con lo primero que mencione y luego avanzas un poco mas.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #10 (permalink)  
Antiguo 13/04/2007, 03:31
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años
Puntos: 2
Re: Vector de un tipo en C++

Pero así, tal cual pones tu el código, en Persona está el String y lo heredan las subclases, por lo que el constructor de Mujer y Hombre tiene que tener ese String, ¿no?

Es que no entiendo, teniendo el código que pones tu, no puedo crear una mujer ni un hombre. Sólo puedo crear Personas, ¿no? Y yo quiero crear objetos Mujer y Hombre.
  #11 (permalink)  
Antiguo 13/04/2007, 07:07
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Vector de un tipo en C++

Cita:
Pero así, tal cual pones tu el código, en Persona está el String y lo heredan las subclases, por lo que el constructor de Mujer y Hombre tiene que tener ese String, ¿no?
No. Si lo heredan. ¿Ya probaste el codigo?. Cuando quieras asignarle el nombre a una mujer en una posicion generica "i" por ejemplo:
Código:
arrayMujeres[i].nombre="Maria";
//En el caso de los hombres
arrayHombres[i].nombre="Manolo";
Acuerdate que de eso precisamente se trata la herencia, los mienbros del padre son heredados por los hijos, en tu caso el padre es "Parsonas" y los hijos "Hombre" y "Mujer".
Cita:
Es que no entiendo, teniendo el código que pones tu, no puedo crear una mujer ni un hombre. Sólo puedo crear Personas,
El hecho de que no lo entiendas no implica que no funcione.
Cita:
Y yo quiero crear objetos Mujer y Hombre.
Asi como esta te permite crear los objetos que deseas. Prueba el codigo y si te da un error o no funciona pregunta de nuevo.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:52.