Ayuda Clases c++

Iniciado por kyon19, 22 Enero 2011, 22:38 PM

0 Miembros y 1 Visitante están viendo este tema.

kyon19

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 :)

Garfield07

Si te sirve en C, me saco esto de la manga jeje...

#include <stdio.h>

int main ()
{
struct documento
{
char titulo[20];
char genero[20];
char idioma[20];
int edad_recomendada;
int axo;
int prestado;
int dias_prestamo;
};

int num, i;
printf ("Num. docs: ");
scanf ("%d", &num);
struct documento docs [num];
for (i = 0; i<num; i++)
{
printf ("Titulo %d: ", i);
fgets (docs [i].titulo, 20, stdin);
printf ("Genero %d: ", i);
fgets (docs [i].genero, 20, stdin);
printf ("Idioma %d: ", i);
fgets (docs [i].idioma, 20, stdin);
printf ("Edad recm. %d: ", i);
scanf ("%d", &docs [i.edad_recomendada]);
printf ("A*o %d: ", i);
scanf ("%d", &docs [i.axo]);
printf ("Prestado %d: ", i);
scanf ("%d", &docs [i.prestado]);
printf ("Dias prestamo %d: ", i);
scanf ("%d", &docs [i.dias_prestamo]);
}

getchar ();
return 0;
}


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!


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

kyon19

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++ :)

leogtz

Puedes utilizar un arreglo de objetos:

Código (cpp) [Seleccionar]

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
using std::string;

class Documento
{
      private:
              //Atributos privados de la clase documentos.
            string Titulo;
            string Genero;
            string Idioma;
            int Edad_recomendada;
            int ano;
            int Prestado;
            int Dias_prestamo;
      public:

    Documento(const string &Titulo, const string &Genero, const string &Idioma, const int &Edad_recomendada)
    {
        this->Titulo = Titulo;
        this->Genero = Genero;
        this->Edad_recomendada = Edad_recomendada;
    }

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

      };


int main(void)
{
    // Creación:
    Documento **docs = new Documento *[10];

    // Liberación:
    for(unsigned int i = 0; i < n; i++)
    delete arreglo[i];
    delete arreglo;


    return 0;
}


Es solo un borrador, faltan los setters y getters y lo que tengas que hacer con los objetos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

kyon19

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

leogtz

Te da error porque en el contructor te falta definir los tipos de datos de los parámetros:

Código (cpp) [Seleccionar]
#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 ano;
              int Prestado;
              int Dias_prestamo;
      public:
             Documento(string, string, string, int, int, int, int): Titulo("Desconocido"), Genero("Desconocido"), Idioma("Desconocido"), Edad_recomendada(0), ano(0),Prestado(0), Dias_prestamo(0)
             {

             }
             int getP()
             {
                return Prestado;
            }
      };

int main(void)
{

    Documento doc1("poke", "anag", "pepe", 58, 1995, 1, 9);
    cout << doc1.getP() << endl;

}


Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

kyon19

Muchísimas gracias!! a veces estoy empanado... esto de la programación me deja tonto... jajaja

kyon19

#7
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 (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

//Clases Definidas.
class Documento
{
protected:
//Atributos privados de la clase documentos.
string Titulo;
string Genero;
string Idioma;
int Edad_recomendada;
int año;
bool Prestado;
int Dias_prestamo;
public:
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){}
string getT(){return Titulo;}
};



//Clases Derivadas.
class Libros : public Documento
{
private:
//Atributos privados de la clase libros.
string Editorial;
string Autor;
int Paginas;
public:
//Constructor de los valores por defecto.
Libros (string, string, int) : Editorial("Desconocido"), Autor("Desconocido"), Paginas(0){}
};

leogtz

Primero coloca el código con la etiqueta GeShi.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

kyon19