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
| |||
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 |
| |||
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 :) |
| ||||
Re: Vector de un tipo en C++ Bueno, tienes varias maneras de hacerlo, una es que uses un arreglo estatico:
Código:
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.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 } Saludos
__________________ Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba: |
| |||
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 |
| ||||
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:
Ahora bien, por lo visto esta no es tu intencion, deberias tratar de que tus clases queden mas o menos asi:Mujer unaMujer("Maria");
Código:
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.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 } Saludos
__________________ Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba: |
| |||
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. |
| ||||
Re: Vector de un tipo en C++ Cita: No. Si lo heredan. ¿Ya probaste el codigo?. Cuando quieras asignarle el nombre a una mujer en una posicion generica "i" por ejemplo: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?
Código:
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".arrayMujeres[i].nombre="Maria"; //En el caso de los hombres arrayHombres[i].nombre="Manolo"; Cita: El hecho de que no lo entiendas no implica que no funcione.Es que no entiendo, teniendo el código que pones tu, no puedo crear una mujer ni un hombre. Sólo puedo crear Personas, Cita: 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.Y yo quiero crear objetos Mujer y Hombre. Saludos
__________________ Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba: |