Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kyon19 en 22 Enero 2011, 22:38 pm



Título: Ayuda Clases c++
Publicado por: kyon19 en 22 Enero 2011, 22:38 pm
Vereis soy nuevo en esto de la programación en c++, y empecé con "c" el año pasado... el caso es que tengo una práctica para febrero y estoy un poco liado... tengo una clase que se llama documento y querría listar por pantalla los documentos existentes... y no se me ocurre como hacerlo... la clase la tengo así:

class Documento
      {
      private:
              //Atributos privados de la clase documentos.
              char Titulo[20];
              char Genero[20];
              char Idioma[20];
              int Edad_recomendada;
              int año;
              int Prestado;
              int Dias_prestamo;
      public:
 //constructor.

// Documento ():Titulo("Desconocido"), Genero("Desconocido"), Editorial("Desconocido"), Autor("Desconocido"), Idioma("Desconocido"), Edad_recomendada(0), año(0),       Dias_prestamo(0){}

      };

int main()
{
Documento doc1;
Documento doc2;
...
Documento doc8;


system("PAUSE");
return 0;
}

Lo que quería era usar un for y fuese buscando hasta que el documento no existiese pero claro... no sé como hacer eso... una cosa es pensarlo y otra escribirlo... jaja

Otro problema en este mismo código es que los char no me los compila, cuando introduzco el constructor y le meto los datos "Desconocido" a los diferentes char me da error y al crear un documento del tipo de la clase y pasarle la cadena también me da fallo...

Un Saludo y gracias de antemano :)


Título: Re: Ayuda Clases c++
Publicado por: Garfield07 en 23 Enero 2011, 00:33 am
Si te sirve en C, me saco esto de la manga jeje...
Código
  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5. struct documento
  6. {
  7. char titulo[20];
  8. char genero[20];
  9. char idioma[20];
  10. int edad_recomendada;
  11. int axo;
  12. int prestado;
  13. int dias_prestamo;
  14. };
  15.  
  16. int num, i;
  17. printf ("Num. docs: ");
  18. scanf ("%d", &num);
  19. struct documento docs [num];
  20. for (i = 0; i<num; i++)
  21. {
  22. printf ("Titulo %d: ", i);
  23. fgets (docs [i].titulo, 20, stdin);
  24. printf ("Genero %d: ", i);
  25. fgets (docs [i].genero, 20, stdin);
  26. printf ("Idioma %d: ", i);
  27. fgets (docs [i].idioma, 20, stdin);
  28. printf ("Edad recm. %d: ", i);
  29. scanf ("%d", &docs [i.edad_recomendada]);
  30. printf ("A*o %d: ", i);
  31. scanf ("%d", &docs [i.axo]);
  32. printf ("Prestado %d: ", i);
  33. scanf ("%d", &docs [i.prestado]);
  34. printf ("Dias prestamo %d: ", i);
  35. scanf ("%d", &docs [i.dias_prestamo]);
  36. }
  37.  
  38. getchar ();
  39. return 0;
  40. }
  41.  

Ahi te lo dejo. Ahora debes continuar con el ejercicio jeje... Lo de dias prestamo podrias calcular el tiempo... Mira funciones de tiempo en el "Rincon del C++". Lo explican muy bien... (Url: Google).
Y lo de prestado puedes usar tmb tiempo, pero solo obtenerlo...

Ahora deberias meterle algo para que vaya guardando en algun sitio, un fichero, etc...
Suerte!


Título: Re: Ayuda Clases c++
Publicado por: kyon19 en 23 Enero 2011, 04:13 am
No me sirve en C... jajaja yo pensé algo asi pero no me dejan... ahora estamos con C++ aunque gracias de todas formas :) espero que alguien sepa como conseguir que me lea los char en C++ con las clases... y respecto a lo de los ficheros para guardarlo gracias por avisar, le meti unos también en C++ :)


Título: Re: Ayuda Clases c++
Publicado por: leogtz en 23 Enero 2011, 05:40 am
Puedes utilizar un arreglo de objetos:

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4. using std::cin;
  5. using std::string;
  6.  
  7. class Documento
  8. {
  9.      private:
  10.              //Atributos privados de la clase documentos.
  11.            string Titulo;
  12.            string Genero;
  13.            string Idioma;
  14.            int Edad_recomendada;
  15.            int ano;
  16.            int Prestado;
  17.            int Dias_prestamo;
  18.      public:
  19.  
  20.    Documento(const string &Titulo, const string &Genero, const string &Idioma, const int &Edad_recomendada)
  21.    {
  22.        this->Titulo = Titulo;
  23.        this->Genero = Genero;
  24.        this->Edad_recomendada = Edad_recomendada;
  25.    }
  26.  
  27.    // Setters and getters
  28. // Libros ():Titulo("Desconocido"), Genero("Desconocido"), Editorial("Desconocido"), Autor("Desconocido"), Idioma("Desconocido"), Edad_recomendada(0), año(0),       Dias_prestamo(0){}
  29.  
  30.      };
  31.  
  32.  
  33. int main(void)
  34. {
  35.    // Creación:
  36.    Documento **docs = new Documento *[10];
  37.  
  38.    // Liberación:
  39.    for(unsigned int i = 0; i < n; i++)
  40.    delete arreglo[i];
  41.    delete arreglo;
  42.  
  43.  
  44.    return 0;
  45. }
  46.  

Es solo un borrador, faltan los setters y getters y lo que tengas que hacer con los objetos.


Título: Re: Ayuda Clases c++
Publicado por: kyon19 en 23 Enero 2011, 13:49 pm
Bueno mas o menos basandome en esos dos códigos que me pusisteis hice este:

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

//Clases Definidas.
class Documento
      {
      private:
              //Atributos privados de la clase documentos.
              string Titulo;
              string Genero;
              string Idioma;
              int Edad_recomendada;
              int año;
              int Prestado;
              int Dias_prestamo;
      public:
             Documento ():Titulo("Desconocido"), Genero("Desconocido"), Idioma("Desconocido"), Edad_recomendada(0), año(0),Prestado(0), Dias_prestamo(0){}
             int getP(){return Prestado;}
      };

int main()
{
    
Documento doc1("poke","anag","pepe",58,1995,1,9);

cout << doc1.getP() << endl;
system("PAUSE");
}

Para hacer una pequeña prueba y haber si tiraba pero no...
Solo me da este fallo en la linea que creo el Documento doc1:

no matching function for call to 'Documento::Documento(cons char[5], const char[5]...)'

y me pone dos notes que son:

1. candidates are Documento::Documento(const Documento&)

2. Documento::Documento()


Gracias por la ayuda que me estais dando :D


Título: Re: Ayuda Clases c++
Publicado por: leogtz en 24 Enero 2011, 00:26 am
Te da error porque en el contructor te falta definir los tipos de datos de los parámetros:

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. using namespace std;
  7.  
  8. //Clases Definidas.
  9. class Documento
  10.      {
  11.      private:
  12.              //Atributos privados de la clase documentos.
  13.              string Titulo;
  14.              string Genero;
  15.              string Idioma;
  16.              int Edad_recomendada;
  17.              int ano;
  18.              int Prestado;
  19.              int Dias_prestamo;
  20.      public:
  21.             Documento(string, string, string, int, int, int, int): Titulo("Desconocido"), Genero("Desconocido"), Idioma("Desconocido"), Edad_recomendada(0), ano(0),Prestado(0), Dias_prestamo(0)
  22.             {
  23.  
  24.             }
  25.             int getP()
  26.             {
  27.                return Prestado;
  28.            }
  29.      };
  30.  
  31. int main(void)
  32. {
  33.  
  34.    Documento doc1("poke", "anag", "pepe", 58, 1995, 1, 9);
  35.    cout << doc1.getP() << endl;
  36.  
  37. }
  38.  
  39.  
  40.  


Título: Re: Ayuda Clases c++
Publicado por: kyon19 en 25 Enero 2011, 21:45 pm
Muchísimas gracias!! a veces estoy empanado... esto de la programación me deja tonto... jajaja


Título: Re: Ayuda Clases c++
Publicado por: kyon19 en 3 Febrero 2011, 02:24 am
Ains... tengo otro problema... ahora al compilar me dice esto:

base "Documento" with only non-default constructor in class without a constructor
en las dos clases derivadas.

En el constructor de las clases derivadas me da este otro error:

no matching function for call to "Documento::Documento()"

Adjunto la clase base y una de las derivadas...:

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. using namespace std;
  7.  
  8. //Clases Definidas.
  9. class Documento
  10. {
  11. protected:
  12. //Atributos privados de la clase documentos.
  13. string Titulo;
  14. string Genero;
  15. string Idioma;
  16. int Edad_recomendada;
  17. int año;
  18. bool Prestado;
  19. int Dias_prestamo;
  20. public:
  21. Documento (string, string, string, int, int, bool, int) : Titulo("Desconocido"), Genero("Desconocido"), Idioma("Desconocido"), Edad_recomendada(0), año(0),Prestado(false), Dias_prestamo(0){}
  22. string getT(){return Titulo;}
  23. };
  24.  
  25.  
  26.  
  27. //Clases Derivadas.
  28. class Libros : public Documento
  29. {
  30. private:
  31. //Atributos privados de la clase libros.
  32. string Editorial;
  33. string Autor;
  34. int Paginas;
  35. public:
  36. //Constructor de los valores por defecto.
  37. Libros (string, string, int) : Editorial("Desconocido"), Autor("Desconocido"), Paginas(0){}
  38. };


Título: Re: Ayuda Clases c++
Publicado por: leogtz en 3 Febrero 2011, 03:27 am
Primero coloca el código con la etiqueta GeShi.


Título: Re: Ayuda Clases c++
Publicado por: kyon19 en 4 Febrero 2011, 09:13 am
Mmmm vale, perdon jaja