Approfondendo la questione (=studiare), mi viene in mente che la mia situazione possa essere gestita in maniera forse più efficiente nel seguente modo (a parte il fatto di aver implementato le funzioni membro direttamente all'interno della classe, ma non ho a disposizione il codice che ho testato con la classica divisione nei file .h e . cpp)
1)
2)codice:class Sezione_type { public: Sezione_type() { area=0; }; ~Sezione_type(); virtual void calcola_area(); ... protected: double area; };
3)codice:class Sezione_rettangolare_type { public: Sezione_rettangolare_type(double B, double H):Sezione_type() { base=B; altezza=H; calcola_area(); }; ~Sezione_rettangolare_type(); void calcola_area() { area=base*altezza; }; protected: double base; double altezza; };
4)in questo modo, nel programma posso farecodice:class Sezione_circolare_type { public: Sezione_circolare_type(double D):Sezione_type() { diametro=D; calcola_area(); } void calcola_area() { area=3.14*pow(D,2.0)/4.0; } protected: double diametro; };
Ora pongo le seguenti domande:codice:int main() { Sezione_type *sezione; ... //righe di codice che permettono di scegliere se sezione rettangolare o circolare e fare l'input dei dati come base e //altezza o in alternativa diametro ... //in base a quanto fatto prima se ho scelto sezione rettangolare sezione = new Sezione_rettangolare_type(B,H); //se ho scelto la sezione circolare sezione = new Sezione_circolare_type(D); .... //righe di codice che permettono di scegliere una sezione di forma diversa e relativo input dati //quindi distruggo la sezione precedentemente creata delete sezione; ... //in base al nuovo tipo di sezione scelta, rifaccio sezione = new ...//e qui ci metto il corrispondente nuovo tipo di costruttore ... //fine del programma delete sezione; return 0; }
1) se al posto di
avessi fattocodice:virtual void calcola_area();nella classe "Sezione_type" tutto quanto riportato nella precedente parte di ipotetico main non avrei potutocodice:virtual void calcola_area()=0;
farlo, perdendone i vantaggi, ho capito giusto? (però se è stato inventato in qualche caso tornerà utile, ma per ora non riesco a capire quando)
2) se in "Sezione_type" avessi semplicemente scrittoe nelle altre classi avessi reimplemento la funzione membro (dovrebbe essere overload, spero di non sbagliarmi), avrei anche in questo caso perso la possibilità di definire all'inizio un oggetto di tipo "generale" come Sezione_type, e "particolareggiarlo" successivamentecodice:void calcola_area();
durante l'esecuzione del programma, corretto?
Grazie

Rispondi quotando