Ho fatto un altro esercizio e funziona, però vorrei capire, sentendo il tuo parere, se stilisticamente e da un punto di vista logico sia scritto in modo esatto. Secondo me no! E poi ti spiego perchè. La traccia è questa:
Si vuole realizzare una classe
vettore3d che permetta di manipolare vettori di tre coordinate x, y e z secondo le seguenti regole:
1. Ci sarà solo una funzione costruttore e sarà in linea
2. Ci sarà una funzione membro
uguale che permette di sapere se due vettori hanno le loro componenti o coordinate uguali. La dichiarazione di
uguale si realizzerà utilizzando: a) trasmissione per valore; b) trasmissione per indirizzo; c) trasmissione per riferimento.
Ora lasciando stare per un attimo le varie modalità di trasmissione, e dicendoti che nel programma che ho fatto non ho messo i getter, come nel precedente, il codice che ho scritto è questo:
#include <iostream>
using namespace std;
class vettore3d {
private:
int x;
int y;
int z;
public:
vettore3d(int a, int b, int c);
bool uguale (const vettore3d &p, const vettore3d &s);
};
inline vettore3d :: vettore3d (int a, int b, int c) : x(a), y(b), z(c) {}
bool vettore3d :: uguale (const vettore3d &p, const vettore3d &s)
{
if ((p.x==s.x) && (p.y==s.y) && (p.z==s.z))
return true;
else return false;
}
int main ()
{
int a, b, c, d, e ,f;
cout << "Coordinata x, y e z primo vettore: ";
cin >> a >> b >> c;
cout << "Coordinata x, y e z secondo vettore: ";
cin >> d >> e >> f;
vettore3d primo(a,b,c);
vettore3d secondo(d,e,f);
vettore3d risultato(0,0,0);
if (risultato.uguale(primo,secondo))
cout << endl << "I vettori sono uguali";
else
cout << endl << "I vettori sono diversi";
cout << endl << endl;
system ("PAUSE");
return 0;
}
Come già detto, il programma scritto in questo modo funziona! Ma da quanto ho imparato un programma che funziona non necessariamente è scritto per bene. E i miei dubbi nascono proprio nel main, perchè per quanto concerne la classe e i metodi secondo me sono scritti bene, a parte il fatto di non aver utilizzato i getter perchè vorrei capirli un pò meglio (vd post precedente). Nel main io dichiaro due oggetti primo e secondo e gli passo dei parametri. E fin qui no problem...Poi dichiaro un terzo oggetto di "appoggio" per poter accedere ai membri, o meglio alla funzione membro uguale. Il fatto è che il programma funziona anche se invece di risultato.uguale(primo,secondo) nell'if scrivo primo.uguale(primo,secondo) oppure secondo.uguale(primo,secondo). Perchè?