Esercizio 9
Realizza la classe Q (Quadrato) dotata degli attributi
lato, posx e posy; questi
ultimi due sono le coordinate cartesiane dell'angolo superiore sinistro
del quadrato.
L'oggetto di classe Q può essere istanziata
solo tramite costruttore. Realizza poi la classe I
(insieme) che riceve in ingresso due quadrati e restituisce in uscita l'esito
di una loro eventuale intersezione (sovrapposizione); in tal caso l'oggetto
di classe I deve restituire l'area dell' intersezione
e dell'unione dei due quadrati. (esempio di scambio di dati fra classi non
derivate fra loro).
#include<iostream>
#include<time.h>
using namespace std;
//____________________classe Q
class Q{
int l,x,y,a;
public :
int getx();
int gety();
int getl();
int geta();
Q(int posx,int posy,int la);//costruttore
} ;
//_________implemetazione metodi
Q::Q(int posx,int posy,int la){
x=posx;
y=posy;
l=la;
a=l*l;
cout << "quadrato creato." << endl;
}
int Q::getx(){ return x;}
int Q::gety(){return y;}
int Q::getl(){return l;}
int Q::geta(){return a;}
//____________________classe I
class I{
int x1,y1,l1,x2,y2,l2;
public :
I(Q qa,Q qb);
} ;
//_________implemetazione metodi
I::I(Q qa,Q qb){
x1=qa.getx();y1=qa.gety();l1=qa.getl(); x2=qb.getx();y2=qb.gety();l2=qb.getl();
if(((x1 < x2 && x1+l1 > x2)||(x2 < x1 && x2+l2 > x1))&&((y1 < y2 && y2-l2
< y1)||(y2 < y1 && y1-l1 < y2)))
cout << "intersezione";
else cout << "nessuna intersezione";
}
main(){
Q q1(10,10,6);
Q q2(18,18,6);
I i(q1,q2);
}//__________fine main
Questo listato lo abbiamo fatto solo per mostrare come
si possano passare come parametri di un oggetto altri oggetti.
Da notare che in questo caso le due classi non sono derivate fra loro.
Non siamo assolutamente certi che la condizione logica che stabilisce l'intersezione
dei due quadrati sia la più breve.
Lasciamo ai più bravi tutte le possibilità di miglioramento dello
scritto, compresa la restituzione dell'area dell'intersezione e dell'unione
dei due quadrati .