[C con Clase] no compila el programa

Steven Davidson srd4121 en njit.edu
Vie Mayo 27 00:52:12 CEST 2011


Hola Jesús,

On 5/26/11, jesus sagñay <jesusagnay1 en hotmail.com> wrote:
>
> buen dia,
>
> Estuve practicando pero no me corre el programa ayudemen viendo
>
> gracias
>
> //a) Definir una clase usuario que contenga información básica como nombre,
> //apellido, cedula, login, password, dirección, teléfono, estado civil,
> correo electrónico,
> // género, edad. De la información dada anteriormente establecer los
> identificadores
> // de acceso que corresponderían a los datos miembros de esta clase.
> #include <iostream.h>
> #include <stdio.h>
> #include <conio.h>
> class usuario
> {
>  private:
>      int cedula;

No estoy seguro si 'int' es el tipo adecuado para representar una
cédula. Intenta con 'unsigned long int' o incluso 'unsigned long long
int'.

>      char login [50];
>          char password[30];
>          char direccion[100];
>          int telefono;

No aconsejo usar 'int' para describir un número de teléfono sino una
cadena de caracteres.

>          char estado_civil [50];

No estoy de acuerdo con guardar una cadena de caracteres. Creo que es
mejor crear un array de cadenas literales, ya que cada estado civil es
conocido: "casado", "soltero", "separado", o "viudo". Creo que me dejo
algún que otro estado. Lo único que tendrías que guardar es el índice
a tal array de cadenas para referirte a un estado o a otro.

>          char correo_electronico[50];
>          char genero[50];

Aquí tenemos un caso similar al del estado civil. Los diferentes sexos
son conocidos y típicamente son representados con una sola letra: V ó
M. Podrías hacer lo mismo o simplemente usar 'char' para guardar estas
letras. Como se trata de dos posibles valores, también podrías optar
por una variable booleana; algo como,

bool bEsVaron;

'true' significa que es varón y 'false' que es una mujer.

>          int edad;
>    public:
>      char nombre[50];
>          char apellido[50];

Estos dos datos miembro deberían ser privados.

>          void imprimir();

Aconsejo indicar que esta función miembro es constante, porque no
tiene intención de modificar "este objeto". Esto es,

void imprimir() const;

> };

Deberías crear algunos constructores y algunas funciones miembro para
establecer (asignar) y obtener cada dato miembro. Por ejemplo,

void asignarNombre( const char *pszNombre );
const char *obtenerNombre() const;

void asignarApellido( const char *pszApellido );
const char *obtenerApellido() const;

>  void usuario::imprimir()
>    {
>    clrscr();
>    usuario usua;

Esto no tiene sentido. La idea es que defines 'imprimir()' para que
funcione con "este objeto".

>    usua.nombre("JESUS");
>    usua.apellido("SAGNAY");
>    usua.cedula=1716234297;
>    usua.login ("JESUSA");
>    usua.password=("XXXXX");
>    usua.direccion("LA ECUATORIANA");
>    usua.telefono=2629055;
>    usua.estado_civil("CASADO");
>    usua.correo_electronico("jesusagnay1 en hotmail.com");
>    usua.genero("MASCULINO");
>    usua.edad=29;

Esto tampoco tiene sentido. La idea es que 'imprimir()' sirve para:
imprimir los datos miembro de "este objeto". Esto significa que no
tiene nada que ver con asignar valores a un objeto temporal.

>    cout <<"DATOS DEL USUARIO";
>    cout << "NOMBRE: " << usua.nombre<<endl;
>    cout << "APELLIDO: "<< usua.apellido<<endl;
>  cout << "CEDULA: " << usua.cedula<<endl;
>    cout << "LOGIN: "<<usua.login<<endl;
>    cout << "PASWWORD: "<<usua.password<<endl;
>    cout << "DIRECCION: "<<usua.direccion<<endl;
>    cout << "TELEFONO: "<<usua.telefono<<endl;
>    cout << "ESTADO CIVIL: "<<usua.estado_civil<<endl;
>    cout << "CORREO ELECT.:"<<usua.correo_electronico<<endl;
>    cout << "GENERO: "<<usua.genero<<endl;
>    cout << "EDAD:"<<usua.edad<<"años";
>    }
>    void main()
>    {

Deberías crear un objeto; por ejemplo,

usuario obj;

>     usuario.imprimir();

Esto no es correcto. 'usuario' es una clase. Necesitas un objeto para
invocar 'imprimir()'. Por ejemplo,

obj.imprimir();

>      getch();
>      } 		 	   		

Recomiendo que leas los capítulos 27 (
http://c.conclase.net/curso/?cap=027#inicio ) al 34, principalmente,
que tratan el tema de las clases y de la programación orientada a
objetos.


Espero que esto te aclare las dudas.

Steven




Más información sobre la lista de distribución Cconclase