[C++]Interpretazione esercizio sulle classi

TheBestNapoli
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.

Risposte
apatriarca
Sembrerebbe essere quella la richiesta dell'esercizio, ma credo che in questi casi sia sempre meglio chiedere conferma al proprio professore.

TheBestNapoli
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
#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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.