PDA

Visualizza la versione completa : [C++] Esercizio su classi e polimorfismo


ar146
25-06-2012, 18:45
Ciao a tutti,
ho questo esercizio d'esame che come al solito non riesco a fare.
Ecco il testo:
Si realizzi in C++ la gerarchia giornale- rivista – quotidiano.

La classe giornale ha le seguenti variabili membro:
float costo;
char * Titolo; // nome del giornale
bool periodico; // vero se è un periodico, falso altrimenti
La classe rivista ha le seguenti variabili membro:
char * editore
char * periodo // ad esempio: settimanale, mensile, etc…
La classe quotidiano ha le seguenti variabili membro:
bool inserto; // vero se il quotidiano prevede inserti, falso altrimenti

Tutte le classi della gerarchia devono fornire le funzionalità necessarie alla creazione e alla distruzione dei relativi oggetti ed inoltre alla corretta gestione di eventuali estensioni dinamiche. Inoltre devono prevedere le funzioni get e set (accesso e posizionamento) e consentire il polimorfismo. A tale proposito si realizzi una funzione stampa_dati che ridefinita in ogni classe possa essere usata in maniera polimorfa.

Si realizzi quindi una classe Pila di riviste, realizzata mediante un vettore allocato staticamente. La pila deve prevedere le classiche funzionalità per la gestione degli elementi secondo la politica LIFO (push, pop, top, empty e full).

Si implementi quindi un opportuno programma di test della gerarchia di classi e della classe Pila di riviste. Il programma di test deve inoltre esemplificare l’uso del polimorfismo sulla gerarchia.

//il polimorfismo in che modo posso realmente applicarlo?
//estensioni dinamiche?


Ho iniziato(e là mi sono fermato):

giorn.h
#ifndef GIORNALE
#define GIORNALE //?perchè si usa?
#include <iostream>
#include <string>

using namespace std;

class giornale {

private:
float costo;
char * Titolo;
bool periodico;
public:
giornale(const float C,const char *T,const bool p);
giornale(const giornale &);
float getCosto() const {return costo;}
char* getTitolo() const {return Titolo;} //??
bool getPeriodico() const {return periodico;}
void setCosto (const float c) {costo=c;}
void setTitolo (const char* valore) {*Titolo=*valore;}
void setPeriodico (const bool valore) {periodico=valore;}
~giornale() {delete [] Titolo;}
}


class rivista {

private:
char * editore;
char * periodo;

public:
rivista(const char *,const char *);
rivista(const rivista &);
char* getEditore() const {return editore;}
char* getPeriodo() const {return periodo;}
void setEditore(const char* valore) {editore=valore;} //ma dove devo mettere tutti questi puntatori? e soprattutto come?
void setPeriodo(const char* valore) {periodo=valore;}
~rivista() {delete [] editore,delete [] periodo;}
}
#endif




/*-class quotidiano {

private:
bool inserto;

public:
*/


giorn.cpp
#include "giorn.h"

giornale::giornale(float C, char *T, bool p){

costo=C;
*Titolo=T;
periodico=p;
}

giornale::giornale(const giornale & G){

costo=G.costo;
Titolo=G.Titolo;
periodico=G.periodico;
}

float getCosto() const {
cout <<costo;
}

rivista::rivista(const char * e,const char * p){
editore=e;
periodo=p;
}

rivista::rivista(const rivista & R){
editore.R.editore;
periodo=R.periodo;
}






main_utente.cpp

#include <iostream>
#include <stdlib.h>
#include "giorn.h"

using namespace std;

int main(int argc, char *argv[]){

giornale sorrisi(2.5,Sorrisi e canzoni,true);
//true va bene?
cout <<"*********Visualizza giornale************"<<endl;
sorrisi.getCosto();
system("PAUSE");
return 0;
}


ovviamente mi trova un sacco di errori, specialmente quando nel prototipo di funzione:
void setEditore(const char* valore) {editore=valore;}

non so bene dove devo mettere l'operatore di dereferenziazione e quindi non fa la conversione tra const char e char*, poi nel main non so se nel costruttore va bene true
giornale sorrisi(2.5,Sorrisi e canzoni,true), perchè essendo booleano che gli dico o true o false, sono negato per questa materia, ma devo fare l'esame e posso chiedere aiuto solo a voi, vi prego datemi una mano

Loading