[C con Clase] vectores y clases
Steven Davidson
srd4121 en njit.edu
Mie Abr 29 16:08:38 CEST 2009
Hola Nelfi,
nelfi hernandez wrote:
> Un saludo muy cordial a todos.
>
> Esta es la primera vez que escribo en la lista, estoy iniciándome con
Ante todo bienvenida a la lista y a este mundillo de la programación de C++.
> c++, y me he topado con un problema que no he podido resolver, mi
> intención es definir una clase por ejemplo habitante, y después crear
> un vector de esa clase con vector<>, para ir introduciendole datos,
> pero no he podido dar con la manera de implementar esto, les pido por
> favor que me ayuden en esto, aqui les dejo parte del codigp que he
> escrito.
>
Veamos el código fuente.
> #include <iostream>
> #include <vector>
> #include <cstdlib>
>
> using namespace std;
>
> // DEFINICION DE LA CLASE
>
> class habitantes {
Esto puede ser un problema. Defines el nombre de la clase como
'habitantes', pero luego indicas que se llama 'habitantes_dn'.
>
> private:
>
> string nombre;
> string apellido;
> unsigned long cedula;
> unsigned short int ano_nacimiento;
> unsigned short int mes_nacimiento;
> unsigned short int dia_nacimiento;
> unsigned short int edad;
> string provincia;
> string direccion;
> string telefono;
>
> public:
>
Aconsejo definir un constructor.
> void agregar_habitante();
> void actualizar_habitante();
> void ver_habitante();
>
No recomiendo agregar '_habitante' a los nombres de estas funciones
miembros. Al fin y al cabo, invocamos estas funciones a partir de un
objeto, y por tanto no es necesario explicar que forman parte de
'habitante'. A veces, puede ser contraproducente el ser demasiado
explicativo.
> }; // Fin de la definicion de la clase habitante_dn
>
>
> // DEFINICION DE LAS FUNCIONES MIEMBROS
>
>
> // Definicion de la funcion miembro Agregar_habitante
>
> void habitantes_dn::agregar_habitante(void) {
Esto es incorrecto, ya que el nombre de la clase es 'habitantes' y no
'habitantes_dn'. O bien cambias el nombre de la clase en su definición o
bien cambias el nombre del ámbito.
Por cierto, en C++, no solemos indicar 'void' para una lista vacía de
parámetros.
>
> system("clear");
>
Ten presente que aunque 'system()' sea una función estándar, el comando
pasado no lo es. En este caso, esto servirá para un intérprete de
comandos de Unix o cualquiera de sus "sabores".
> cout <<"\n\nAgrege los datos del habitante por favor..." << endl <<
> endl;
>
> cout <<"Nombre : ";
> getline (cin, nombre);
>
> cout <<"\n\nApellido : ";
> getline (cin, apellido);
>
> cout <<"\n\nCedula : ";
> cin >> cedula;
>
> cout <<"\n\nAño de nacimiento : ";
> cin >> ano_nacimiento;
>
> cout <<"\n\nMes de nacimiento : ";
> cin >> mes_nacimiento;
>
> cout <<"\n\nDia de nacimiento : ";
> cin >> dia_nacimiento;
>
> cout <<"\n\nEdad : ";
> cin >> edad;
>
> cin.ignore();
>
> cout <<"\n\nProvincia de nacimiento : ";
> getline(cin, provincia);
>
> cout <<"\n\nDireccion : ";
> getline(cin, direccion);
>
> cout <<"\n\nTelefono : ";
> getline(cin, telefono);
>
> } // Fin de la definicion de la funcion miembro Agregar_habitante
>
>
> // Definicion de la funcion miembro ver_habitante
>
> void habitantes_dn::ver_habitante() {
>
Aquí tienes el mismo problema que en la implementación anterior. El
nombre de la clase es 'habitantes'.
> // for (unsigned int i(0); i < habitantes.size(); i++) {
>
> system("clear");
>
>
> cout <<"\n\n\t\t! Datos del ciudadano !" << endl << endl;
>
> cout <<"Nombre : " << habitantesnombre <<
> endl << endl;
>
> cout <<"Apellido : " << apellido << endl << endl;
>
> cout <<"Cedula : " << cedula << endl << endl;
>
> cout <<"Año de nacimiento : " << ano_nacimiento << endl
> << endl;
>
> cout <<"Mes de nacimiento : " << mes_nacimiento << endl
> << endl;
>
> cout <<"Dia de nacimiento : " << dia_nacimiento << endl
> << endl;
>
> cout <<"Edad : " << edad << endl << endl;
>
> cout <<"Provincia de nacimiento : " << provincia << endl << endl;
>
> cout <<"Direccion : " << direccion << endl << endl;
>
> cout <<"Telefono : " << telefono << endl << endl;
>
> // } // Fin de For
>
>
> } // Fin de la defincion de la funcion miembro ver_habitante
>
>
>
> // USO DE LA CLASE
>
> void usar_clase(void) {
>
> char op;
>
> vector<habitantes_dn> habitantes;
> habitantes_dn habitante;
>
Aquí tienes el mismo problema que antes. El nombre de la clase es
'habitantes'. Luego instancias el objeto 'habitantes' cuyo nombre choca
con el nombre de la clase que definiste al principio.
> do {
>
> habitante.agregar_habitante();
>
> habitantes.push_back(habitante);
>
> cout <<"\n\nDesea continuar agregando habitantes [ S | N ] ";
> cin >> op;
> cin.ignore();
>
> cout <<"\n\nRegistros del vector = " << habitantes.size();
>
> } while (op == 's' || op == 'S');
>
> habitante.ver_habitante();
>
>
> }
>
>
> // FUNCION PRINCIPAL
>
> int main(void){
>
> usar_clase();
>
> return 0;
>
> } // Fin de la funcion main
>
>
Espero que esto te sirva.
Steven
Más información sobre la lista de distribución Cconclase