Il tuo codice (riportato qui) non compila nemmeno. Solo ora mi sono accorto che non esiste ereditarietà tra le classi, il rende la discussione falsata in partenza (hai riportato male il codice?)
In caso di ereditarietà, molto meglio la seconda soluzione (pattern Strategy http://www.vincehuston.org/dp/strategy.html)
Ancora meglio usando smart pointer (qui uso std::unique_ptr).
Notare che quello che viene fatto nel main può essere a sua volta incapsulato in una classe secondo il pattern State:
http://www.vincehuston.org/dp/state.html
codice:int main() { std::unique_ptr<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.reset(new Sezione_rettangolare_type(B,H)); sezione->calcola_area(); //in base al nuovo tipo di sezione scelta, rifaccio sezione.reset(new Sezione_circolare_type(D)); sezione->calcola_area(); return 0; }

Rispondi quotando