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

ayuda con class

Estas en el tema de ayuda con class en el foro de C/C++ en Foros del Web. bueno simplemente no entiendo como es que funciona una clase por ejemplo esta la transcribi del libro que estoy leyendo Código: //************************************************* // ARCHIVO DE ...
  #1 (permalink)  
Antiguo 09/08/2008, 01:47
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 7 meses
Puntos: 2
Pregunta ayuda con class

bueno simplemente no entiendo como es que funciona una clase
por ejemplo esta la transcribi del libro que estoy leyendo

Código:
//*************************************************
// ARCHIVO DE ESPECIFICACIÓN (Time.h)
// Este archivo proporciona la especificación
// de un tipo de datos abstractos Time
//*************************************************

class Time
{
    public:
    void Set(int hours,int minutes,int seconds);
    //Precondición:
    //      0 <= hours <= 23 && 0 <= minutes <= 59 && 0 <= seconds <= 59
    //Poscondición:
    //      El tiempo se establece de acuerdp con los parámetros entrantes
    // NOTA:
    //      Esta función debe ser llamada antes que
    //      cualquiera de las otras funciones miembro

    void Increment();
    //Precondicion
    //      La función Set ha sido convocada por lo menos una vez
    //Poscondición:
    //      El tiempo ha sido adelantado en un segundo con,
    //        23:59:59 que comienza de nuevo en 0:0:0

    void Write() const;
    //Precondición:
    //      La función Set ha sido invocada por lo menos una vez
    //Poscondición:
    //      El tiempo ha sido generado en la forma HH:MM:SS

    bool Equal(Time otherTime) const;
    //Precondición
    //      La funcion Set ha sido invocada por lo menos una vez
    //      para este tiempo y otro tiempo (otherTime)
    //Poscondición:
    //      Valor de función == true, si este tiempo es igual a otherTime
    //                       == false, en caso contrario

    bool LessThan(Time otherTime) const;
    //Precondición:
    //      La funcion Set ha sido invocada por lo menos una vez
    //      para este tiempo y otro tiempo (otherTime) && Este tiempo y otherTime representan tiempos en el mismo dia
    //Poscondición:
    //      Valor de función == true, si este tiempo está antes en el dia que otherTime
    //                       == false, en caso contrario

    private:

    int hrs;
    int mins;
    int secs;
};

Código:
//****************************************************************
// ARCHIVO DE IMPLEMENTACIÓN (Time.cpp)
// Este archivo pone en práctica las funciones de miembro Time
//****************************************************************


#include <iostream>
#include "Time.h"
// Miembros de clase privados
//      int hrs;
//      int mins;
//      int secs;

//*******************************************************************************************************************************************************************

void Time::Set(int hours,int minutes,int seconds)
{
    //Precondición:
    //      0 <= hours <= 23 && 0 <= minutes <= 59 && 0 <= seconds <= 59
    //Poscondición:
    //      El tiempo se establece de acuerdp con los parámetros entrantes
    // NOTA:
    //      Esta función debe ser llamada antes que
    //      cualquiera de las otras funciones miembro

    hrs = hours;
    mins = minutes;
    secs = seconds;
}
//************************************************************************************************************************************************************************

void Time::Increment()
{
    //Precondicion
    //      La función Set ha sido convocada por lo menos una vez
    //Poscondición:
    //      El tiempo ha sido adelantado en un segundo con,
    //        23:59:59 que comienza de nuevo en 0:0:0

    secs++;
    if(secs > 59)
    {
        secs = 0;
        mins++;
        if(mins > 59)
        {
            mins = 0;
            hrs++;
            if(hrs > 23) hrs = 0;
        }
    }
}
//***********************************************************************************************************************************************************************

void Time::Write() const
{
    //Precondición:
    //      La función Set ha sido invocada por lo menos una vez
    //Poscondición:
    //      El tiempo ha sido generado en la forma HH:MM:SS

    if(hrs < 10) std::cout << '0';
    std::cout << hrs << ':';
    if(mins < 10) std::cout << '0';
    std::cout << mins << ':';
    if(secs < 10) std::cout << '0';
    std::cout << secs;
}
//************************************************************************************************************************************************************************

bool Time::Equal(Time otherTime) const
{
    //Precondición
    //      La funcion Set ha sido invocada por lo menos una vez
    //      para este tiempo y otro tiempo (otherTime)
    //Poscondición:
    //      Valor de función == true, si este tiempo es igual a otherTime
    //                       == false, en caso contrario

    return (hrs == otherTime.hrs && mins == otherTime.mins && secs == otherTime.secs);
}
//************************************************************************************************************************************************************************

bool Time::LessThan(Time otherTime) const
{
    //Precondición:
    //      La funcion Set ha sido invocada por lo menos una vez
    //      para este tiempo y otro tiempo (otherTime) && Este tiempo y otherTime representan tiempos en el mismo dia
    //Poscondición:
    //      Valor de función == true, si este tiempo está antes en el dia que otherTime
    //                       == false, en caso contrario

    return(hrs < otherTime.hrs || hrs == otherTime.hrs && mins < otherTime.mins || hrs == otherTime.hrs && mins == otherTime.mins && secs < otherTime.secs);
}
bueno lo que no entiendo es como funciona, como la uso
donde puedo poner un main() y despues como la uso

lo que entendi es que compilaba el .cpp de la clase y me hiba a dar un archivo que tiene codigo maquina pero aun no esta enlazado, depues hago lo mismo con el .cpp del programa donde la quiero utilizar y los uno pero no se como.
y como es que puedo harmar una clase,
si me puden ayudar o dar un enlaze donde
gracias.
  #2 (permalink)  
Antiguo 10/08/2008, 13:29
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: ayuda con class

Buenas! para poder hacer servir una clase, tienes que crear una variable de esa clase, haciendo asi:

Código:
Nombre_De_La_Clase  Variable_De_La_Clase

/* En tu caso seria asi : */

Time Tiempo
Fijate, que es identico como lo haces normalmente con tipos normales, lo unico que con las clases solo cambia el nombre. Quando declaras una variable de una clase ( un objeto ) se va directamente al constructor, que hay define las variables que hay dentro la clase. Para poder hacer servir la clase, no solo hace falta crear la variable, tienes que hacer esto:

Código:
Variable_De_La_Clase.Metodo_De_La_Clase

// o

Variable_De_La_Clase.Atributo_De_La_Clase

// Los atributos, y los metodos, solo son accsesibles fuera de la clase si son public

/* En tu caso seria asi:  */

Tiempo.Set(50,15,3) // Le pasas tres parametros, porque al declararlo le 
                                // pusiste 3 parametros
Para poder ir a los metodos o atributos de una clase, se hace con la variable y con el punto ('.'). Recuerdo, que solo se pueden acceder a los metodos o atributos publicos.

Código:
Tiempo.hrs = 43; // Esto, te daria error al compilar, porque la variable hrs,es //private

Normalmente, las clases constan de dos ficheros, uno para la definicion, y otra para la declaracion. Para poder hacer lo que yo puse arriba, necesitas tener el punto de entrada ( el main ) en un otro fichero, que desde hay incluiremos donde tienes la declaracion de la clase.

Ejemplo de un main :

Código:
#include "Nombre_Del_Fichero_Declaracion_Clase"

int main(void)
{
     Nombre_De_La_Clase Objeto_De_La_Clase

     Objeto_De_La_Clase.Metodo_De_La_Clase();

    return 0;
}

Bueno, eso es todo, espero que te haya servido y si no comenta, si no entiendes algo, hacmelo saber que te lo explicare con mas detalles

Saludos!

PD: Yo no se como unir ficheros, seguramente usas linux, con el compilador G++, aqui te dejo un poquito de informacion:
http://www.espaciolinux.com/foros-tema-t11627.html
  #3 (permalink)  
Antiguo 10/08/2008, 22:11
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: ayuda con class

hola gracias ahora comprendo un poco mas, hase poco hise el programa del ahorcado pero ahora quiero hacer a el ahorcado una clase pero me surge una duda
en el fichero de declaracion:
Código:
class Hanged
{
    public:
        void SetWord(std::string word);         //Palabra a utilizar para el ahorcado
        void AutoSetWord(std::ifstream &words); //Auto obtener palabra de un fichero
        void AddWin(int number);                //sumar ganadas
        void AddLose(int number);               //sumar perdidas
        void ShowHanged(int progres);           //Muestra al ahorcado
        void FindLetter(char letter);           //Para descartar una letra de la palabra
    private:
        std::string word;                      //Almacena la palabra a usar
        std::string controlWord;               //Variable de control para word
        int won;                               //Almacena partidas ganadas
        int lose;                              //Almacena partidas perdidas
}
en
----------------------------------
estoy usando tipos que necesitan un #include por ejemplo
void SetWord(std::string word);
debo poner el #include <iostream> en el fichero .h o en el .cpp? o en ambos?
  #4 (permalink)  
Antiguo 11/08/2008, 06:33
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: ayuda con class

me autorespondo a mi ultima pregunda,
creeo que es la pregunta mas estupida que pude haber hecho
#include solo se encarga de pegar el archivo asi que no importa donde ponga los #include
aunque creeo que es mejor en el .cpp
  #5 (permalink)  
Antiguo 11/08/2008, 08:43
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: ayuda con class

Me alegro que ta haya servido mi respuesta, si no sabes algo mas, por favor comenta

Saludos!
  #6 (permalink)  
Antiguo 11/08/2008, 09:13
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 7 meses
Puntos: 2
Sonrisa Respuesta: ayuda con class

Ya termine de hacer la classe del ahorcado¡
no la puse aqui por que decia que acortara el texto a 10000 pero la publico en Goocle docs
aqui esta la clase
http://docs.google.com/Doc?id=dgz4r3wn_68cfn7hkgj
y aqui esta el .cpp
http://docs.google.com/Doc?id=dgz4r3wn_69fr9xr8cs
--------
aclaro que ahi cosas que no se ben en el codigo pero si estan ahi por ejemplo los for o los if
pero ahi estan solo es de seleccionarlos

Funciona asi:
si le pasas como parametro al ejecutarlo un fichero saca las palabras al hazar de ahi
y si no le pasas ninguno te pregunta que palabra usar
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 13:44.