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 :)
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!
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++ :)
Puedes utilizar un arreglo de objetos:
#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.
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
Te da error porque en el contructor te falta definir los tipos de datos de los parámetros:
#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;
}
Muchísimas gracias!! a veces estoy empanado... esto de la programación me deja tonto... jajaja
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...:
#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){}
};
Primero coloca el código con la etiqueta GeShi.
Mmmm vale, perdon jaja