Programma principale
#include <iostream>
#include "es_4a_class.h" // classe punto
#include "es_5a_class.h" // classe rettaAB
using namespace std;
int main(){
rettaAB r1(3.0/2.0, 0);
punto p1(4,1),p2(5,0);
rettaAB r2(p1,p2);
cout << "\n\n--> Funzioni get:";
cout << "\n--> Retta 1: a = " << r1.get_a() << "; b = " << r1.get_b();
cout << "\n--> Retta 2 creata con i punti (4,1) e (5,0)";
cout << "\n--> Retta 2: a = " << r2.get_a() << "; b = " << r2.get_b() <<
endl; rettaAB r3(14,-4);
cout << "\n--> Funzioni set:";
cout << "\n--> Retta 3, prima: a = " << r3.get_a() << "; b = " <<
r3.get_b();
r3.set_a(10);
r3.set_b(2);
cout << "\n--> Retta 3, dopo: a = " << r3.get_a() << "; b = " <<
r3.get_b() << endl;
cout << "\n--> Intersezione tra r1 ed r2:\n--> ";
punto in = r1.intersezione(r2);
in.stampa();
cout << endl;
rettaAB ra(4,2), rb(4,2), rc(4,-1);
punto pb = ra.intersezione(rb), pc = ra.intersezione(rc);
cout << "\n--> Casi patologici:\n--> intersezione di una retta con se
stessa: ";
pb.stampa();
cout << "\n--> Intersezione di due rette parallele: ";
pc.stampa();
cout << "\n\n--> Fine.\n";
return 0;
}
es_5a_class.h
*******************************************
* es_5a_class.h *
*******************************************
#ifndef RETTA_AB
#define RETTA_AB
#include "es_4a_class.h" // senza questa non si puo' usare
// l'oggetto punto in questo header file!
// retta nella notazione y = ax + b
class rettaAB{
/* Una classe puo' avere piu' costruttori!
Anzi, in generale:
possono esistere ** piu' funzioni ** con lo STESSO NOME
purche' differiscano per (almeno uno tra):
- Numero di argomenti
- Tipi di argomenti
- Tipo di dato di ritorno
fintanto che ci sono queste differenze, il compilatore sapra' sempre
come risolvere l'ambiguita'.
Quindi non ci sono problemi a scrivere:
...
retta(double, double);
retta(punto&, punto&);
(nota sulla '&': quando i due punti vengono passati al costruttore, se non
ci fosse
la '&' ne verrebbero fatte due copie temporanee - inutili in questo caso -
con dispendio di risorse, tempo e chiamate addizionali ai costruttori di
'punto').
Mettendo la '&' vengono passati al costruttore gli originali!
*/
public:
Programma C++ (classe retta implementazione)
Il programma implementa una classe retta nel piano, che utilizza la classe punto.
La classe deve avere:
- Due o tre data members (a seconda che si scelga di usare la rappresentazione y=ax+b o ax+by+c=0).
- Il corrispondente costruttore con due o tre double in entrata.
- Un costruttore con argomenti due oggetti di tipo punto (si costruisce la retta passante).
- Tutte le funzioni "standard" get e set.
- Una funzione che rende un oggetto punto rappresentante l'intersezione di due rette.