[ Edwa_ze @ 08.11.2007. 16:33 ] @
Pozzz......
Znam da nista uradjeno postavio nisam, ali ne znam niti jedan korak ovog programa.Dobio sam kao domaci zadatak da uradim dole navedeni program. Molio bih ako neko moze i zna da pomogne............HVALA


Klase
Opterecivanje operatora

1. Definisati klasu Vektor koja ima sljedece clanove:
a) tri clana podatka, koji definišu komponente vektora u tri dimenzije - ax, ay, az,
b) funkcijski clan definisi, koji definiše neki vektor intenziteta nula,
c) funkcijski clan dajVrijednost, koji definisanom vektoru daje vrijednost za njegove
komponente - clan ima maksimalno tri argumenta,
d) funkcijski clan ispis, koji ispisuje neki vektor u obliku (ax,ay,az),
e) funkcijski clan intenzitet, koji daje intenzitet nekog vektora,
f) funkcijski clan saberi, koji sabire dva vektora - rezultat je vektor,
g) funkcijski clan oduzmi, koji oduzima dva vektora - rezultat je vektor,
h) funkcijski clan pomnoziSkalar, koji vektor množi proizvoljnim realnim brojem -
rezultat je vektor,
i) funkcijski clan skalarProiz, koji daje skalarni proizvod dva vektora - rezultat je
realan broj,
j) funkcijski clan vektorProiz, koji daje vektorski proizvod dva vektora - rezultat je
vektor.
[ xeron @ 09.11.2007. 12:12 ] @
Code:

class Vector{
    double x, y, z;
    public:
    
    void Definisi (){
        x=0; y=0; z=0;
        
    }

    void dajVrijednost(double x, double y, double z){
        Vector::x=x; Vector::y=y; Vector::z=z;
        //Ovdje se mogla izvrsiti dodjela i bez pisanja
        //ovog Vector::, ali zbog preglednosti sam to stavio.
        //Sada se vidi da se x artibutu klase Vector dodjeljuje
        //vrijednost varijable x.
    }

    void Ispisi() const {
        cout<<"{"<<x<<", "<<y<<", "<<z<<"}";
    }

    double Intenzitet() const {
        return sqrt(x*x + y*y + z*z);
    }

    void Saberi(const Vector & v){
        x= x+v.x; y= y+v.y; z= z+v.z;
    }

    void Oduzmi(const Vector & v){
        x= x-v.x; y= y-v.y; z= z-v.z;
    }

    void PomnoziSkalarom(double s){
        x= x*s; y= y*s; z= z*s;
    }

   //Odavde sada sam mozes zakljuciti na koji nacin se prave metode
   //pa sam dodaj te preostale, koje nisam ovdje naveo.


I da kao sto u tvom naslovu pise "Opterecivanje operatora" ce se desiti u slucaju da nad nekim objektom tipa Vector pozovemo vise ulancanih metoda. Npr.
Code:
v1.Saberi(v2).PomnoziSkalarom(5).Ispisi()
nam nece dati zeljeni rezultat. Da bi rijesili ovaj problem metode trebaju da vracaju referencu na objekat, a ne kopije objekta sto je slucaj u gore navedenim metodama.

Izmjena metoda, sada se moze koristiti ulancani poziv:
Code:

Vector &PomnoziSkalarom(double s){
    x= x*s; y= y*s; z= z*s;
    return *this;
}

Vector &Saberi(Vector &v){
    x= x+v.x; y= y+v.y; z= z+v.z;
    return *this;
 }