#include <iostream>
#include "es_6a_class_ter.h"
using namespace std;
int main(){
vettore v1(1,3,4), v2(-10,-20,-30);
// test per i vari overloading...
vettore v3 = 6 * v1;
vettore v4 = v2 * 0.1;
vettore v5 = v3 / 3;
vettore v6 = !v4;
vettore v7 = v1;
cout << endl << endl;
cout << "--> v1: " << v1 << endl;
cout << "--> v2: " << v2 << endl;
cout << "--> v3 = 6 * v1: " << v3 << endl;
cout << "--> v4 = v2 * 0.1: " << v4 << endl;
cout << "--> v5 = v3 / 3: " << v5 << endl;
cout << "--> v6 = !v4: " << v6 << endl;
cout << "--> v7 = v1: " << v7 << endl;
cout << "--> v1==v7 e': " << (v1==v7) << endl;
cout << "--> v2==v7 e': " << (v2==v7) << endl;
v3+=v5;
cout << "--> v3+=v5, dopodiche v3 e': " << v3 << endl << endl;
cout << "--> Fine." << endl;
return 0;
}
#ifndef VETTORE_H
#define VETTORE_H
#include <iostream> // necessario anche qui, perche' si parla di "ostream"
using namespace std;
class vettore{
friend ostream & operator<< (ostream &, const vettore &);
friend vettore operator*(double, const vettore &);
public:
vettore();
vettore(double, double, double);
double get_x() const{return x;}
double set_x(double n_x){return x=n_x;}
double get_y() const{return y;}
double set_y(double n_y){return y=n_y;}
double get_z() const{return z;}
double set_z(double n_z){return z=n_z;}
double modulus();
double scalar_prod(const vettore&);
vettore cross_prod(const vettore&);
// si fa overloading di diversi operatori...
// si possono creare due diversi overloading per il *:
vettore operator*(double) const; // prodotto per scalari nella forma
v * n; // il caso n * v va trattato come
funzione friend... // (vedi sopra)
vettore operator/(double); // divisione di un vettore per un numero:
v1 = v2/5; vettore operator!(); // si decide che l'operatore (unario) "!"
cambia di // segno il vettore...
bool operator==(const vettore &);
// con "==" si vuole in pratica incorporare il controllo
// componente per componente all'interno della classe...
vettore& operator+=(const vettore &);
Euclideo C++
Il programma permette di scrivere una classe vettore, rappresentante un vettore nello spazio euclideo a tre dimensioni (x, y, z) di R_3. L'oggetto 'vettore' deve avere:
- Come data members le componenti cartesiane x, y, z
- Un costruttore con le tre componenti
- Funzioni get e set per le componenti
- Una funzione modulo() per ottenere la lunghezza del vettore
- Una funzione prodotto_scalare() che rende un double da due vettori
- Una funzione prodotto vettoriale() che rende un vettore
- Overloading degli operatori + e - tra due oggetti vettore
- Overloading dell'operatore << per poter utilizzare, ad es.: cout << v1;