@piolo se incappato
involontariamente ( ) in uno dei problemi della programmazione ad oggetti
Quello che ti servirebbe, e che esiste in pochissimi linguaggi, e non in C++, e' la possibilita' di definire dei
multimethods o, in alternativa, usare il
multidispatch.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1529.html
http://www.stroustrup.com/multimethods.pd
https://en.wikipedia.org/wiki/Multiple_dispatc
Potrebbe essere l'occasione buona per provare ad utilizzare questa libreria:
https://github.com/jll63/yomm1
https://www.codeproject.com/Articles/650288/Open-Multi-Methods-for-Cplusplu.
Comunque, in questo particolare caso, una soluzione potrebbe essere la seguente:
TUTTE le tue figure geometriche possono essere rappresentate da un POLGONO (compreso il cerchio: semplicemente lo rappresenti come un poligono regolare con 10/20/100/1000 lati, a tua discrezione), che fara' da classe BASE per TRIANGOLO, QUADRATO, CERCHIO, ..
Quindi, le operazioni di UNIONE, INTERSEZIONE, DIFFERENZA tra due qualunque figure geometriche vengono calcolate direttamente dalla classe base POLIGONO.
Se ci pensi, IN OGNI CASO devi ragionare in termini di poligoni, perche' l'intersezione di due quadrati, ad esempio, NON E' DETTO che ritorni un quadrato!
Altra considerazione: NON TI SERVONO delle classi specifiche per il TRIANGOLO, il QUADRATO o il CERCHIO, ma SOLO dei
factory methods (metodi statici definiti nella classe POLIGONO) a cui passi i parametri specifici per un TRIANGOLO/QUADRATO/CERCHIO e creano un oggetto di tipo POLIGONO.
Nota/1: la
programmazione funzionale E TUTTA UN'ALTRA STORIA !!!!!!!!!!!!!
Nota/2: la tua classe POLIGONO, in realta', sara' decsamente complicata per i seguenti motivi:
1) alcune operazioni possono generare una figura geometrica composta da piu' parti: ad esempio l'unione di due quadrati che non si intersecano
2) devi gestire non solo poligoni CONVESSI, ma anche CONCAVI (con delle rientranze)
3) peggio ancora, i tuoi poligoni potrebbero avere dei BUCHI