[C++]Interpretazione esercizio sulle classi
Salve a tutti, avrei un esercizio di cui non ho ben capito come devo procedere nel suo svolgimento; l'esercizio è il seguente:
Considerate la classe motocicletta. Con La vostra conoscenza delle comuni componenti di una motocicletta, create una gerarchia nella quale la classe motocicletta deriva da altre classi. Discutete l'istanza dei vari oggetti della classe motocicletta e discutete e realizzate l'ereditarietà della classe motocicletta per le altre classi strettamente correlate.
Costruite due versioni di questo esercizio, uno nella quale si consideri l'ereditarietà e l'altro nel quale si consideri la composizione.
Non ho ben capito la divisione delle due versioni... ho supposto che nella versione in cui si considera l'ereditarietà bisogna creare una classe base astratta tipo MezziDiTrasporto che si può dividere in MezziAMotore e MezziNonAMotore, da MezziAMotore far derivare Motocicletta e poi ancora, ad esempio, Sidecar. Nella versione in cui si considera la composizione, invece, penso che bisogna creare una classe motocicletta che possiede tra i dati membro oggetti di altre classi che possono essere fra le più svariate (motore, ruote, ecc...).
E' corretta questa interpretazione? Grazie mille a tutti.
Considerate la classe motocicletta. Con La vostra conoscenza delle comuni componenti di una motocicletta, create una gerarchia nella quale la classe motocicletta deriva da altre classi. Discutete l'istanza dei vari oggetti della classe motocicletta e discutete e realizzate l'ereditarietà della classe motocicletta per le altre classi strettamente correlate.
Costruite due versioni di questo esercizio, uno nella quale si consideri l'ereditarietà e l'altro nel quale si consideri la composizione.
Non ho ben capito la divisione delle due versioni... ho supposto che nella versione in cui si considera l'ereditarietà bisogna creare una classe base astratta tipo MezziDiTrasporto che si può dividere in MezziAMotore e MezziNonAMotore, da MezziAMotore far derivare Motocicletta e poi ancora, ad esempio, Sidecar. Nella versione in cui si considera la composizione, invece, penso che bisogna creare una classe motocicletta che possiede tra i dati membro oggetti di altre classi che possono essere fra le più svariate (motore, ruote, ecc...).
E' corretta questa interpretazione? Grazie mille a tutti.
Risposte
Sembrerebbe essere quella la richiesta dell'esercizio, ma credo che in questi casi sia sempre meglio chiedere conferma al proprio professore.
Mi sono informato e ho saputo che queto esercizio è libero da interpretazioni, quindi suppongo possa proseguire come avevo pensato; riguardo alla prima versione ho provato a scrivere un esempio di codice, potresti darmi un tuo parere? (non sapevo cosa inventarmi, se puoi mi daresti anche qualche consiglio?)
header.h
header.cpp
main.cpp
output
Grazie.
header.h
#ifndef HEADER_H_ #define HEADER_H_ #include <iostream> #include <string.h> #define N 100 using namespace std; typedef char stringa[N]; class MezziDiTrasporto{ public: virtual void print()const = 0; }; class MezziAMotore : public MezziDiTrasporto{ public: virtual void print()const = 0; }; class Motocicletta : public MezziAMotore{ public: Motocicletta(stringa, stringa, stringa, int, stringa, int); void setTipologia(stringa ti){strcpy(tipologia,ti);} void setMarca(stringa ma){strcpy(marca,ma);} void setModello(stringa mo){strcpy(modello,mo);} void setPrezzo(int p){prezzo = p;} void setAlimentazione(stringa al){strcpy(alimentazione,al);} void setCilindrata(int ci){cilindrata = ci;} int getCilindrata()const {return cilindrata;} int getPrezzo()const {return prezzo;} virtual void print()const; private: stringa tipologia, marca, modello, alimentazione; int cilindrata, prezzo; }; class Sidecar : public Motocicletta{ public: Sidecar(stringa, stringa, stringa, int, stringa, int, stringa); void setColore(stringa co){strcpy(colore,co);} virtual void print()const; private: stringa colore; }; #endif /* HEADER_H_ */
header.cpp
#include "header.h" Motocicletta::Motocicletta(stringa ti, stringa ma, stringa mo, int ci, stringa al, int p) { setTipologia(ti); setMarca(ma); setModello(mo); setCilindrata(ci); setAlimentazione(al); setPrezzo(p); } void Motocicletta::print()const { cout<<"Tipologia: "<<tipologia<<endl; cout<<"Marca: "<<marca<<endl; cout<<"Modello: "<<modello<<endl; cout<<"Cilindrata: "<<cilindrata<<"CC\n"; cout<<"Alimentazione: "<<alimentazione<<endl; cout<<"Prezzo: €"<<prezzo<<endl; } Sidecar::Sidecar(stringa ti, stringa ma, stringa mo, int ci, stringa al, int p, stringa co) : Motocicletta(ti,ma,mo,ci,al,p) { setColore(co); } void Sidecar::print()const { Motocicletta::print(); cout<<"Colore: "<<colore<<endl; }
main.cpp
#include "header.h" int main() { Motocicletta m("Cross","Yamaha","YZ 250",250,"Benzina",5500); cout<<"Motocicletta:\n"; m.print(); cout<<endl; Sidecar s("Storico","Bernelli","Tornado k650",650,"Benzina",2500,"Blu"); cout<<"Sidecar:\n"; s.print(); return 0; }
output
Motocicletta: Tipologia: Cross Marca: Yamaha Modello: YZ 250 Cilindrata: 250CC Alimentazione: Benzina Prezzo: €5500 Sidecar: Tipologia: Storico Marca: Bernelli Modello: Tornado k650 Cilindrata: 650CC Alimentazione: Benzina Prezzo: €2500 Colore: Blu
Grazie.