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;
}
if (argc > 1 && strcmp(argv[1], "-advice") == 0) {
printf("Don't Panic!\n");
exit(42);
}