[ azzpoz @ 17.11.2013. 17:57 ] @
Code:
#include <iostream>
using namespace std;

class complex
{
      public:
             double real_dio;
             double imag_dio;
             complex(double r, double i);
             void info(){cout<<" "<<real_dio<<" / "<<imag_dio<<endl;}
             
};

complex::complex(double r, double i)        // konstruktor
{
                        real_dio = r;
                        imag_dio = i;
}

complex operator+(const complex l, const complex d)
{
       return complex(l.real_dio + d.real_dio, l.imag_dio + d.imag_dio);
}

int main()
{
    
    complex a(2.0, 3.0);
    complex b(3.0, 2.0);
    
    complex z = a + b;
    
    complex y = a.operator+(b); // ne radi!!!
    
    
    system("pause>0"); return 0;
    }


Radi operacija a + b, ali zašto ne i a.operator+(b)?

[ azzpoz @ 17.11.2013. 18:05 ] @
Uspio sam riješiti tako što sam dodao i ovu "funkciju"
Code:

complex operator+(const complex r)
{
        return complex(r.real_dio, r.imag_dio);
}


Da li ima smisla ovako nešto uraditi ili treba "bježati" od kompliciranja preklapanja operatora?!
[ djoka_l @ 17.11.2013. 18:27 ] @
Operator + treba da bude member klase complex

Code (cpp):

#include <iostream>
using namespace std;

class complex
{
      public:
             double real_dio;
             double imag_dio;
             complex(double r, double i);
             void info(){cout<<" "<<real_dio<<" / "<<imag_dio<<endl;}
              complex operator+(const complex d);
             
};

complex::complex(double r, double i)        // konstruktor
{
                        real_dio = r;
                        imag_dio = i;
}

complex complex::operator+(const complex d)
{
       return complex(this->real_dio + d.real_dio, this->imag_dio + d.imag_dio);
}

int main()
{
   
    complex a(2.0, 3.0);
    complex b(3.0, 2.0);
   
    complex z = a + b;
   
    complex y = a.operator+(b); // ne radi!!!
   
   
    return 0;
}

 
[ azzpoz @ 17.11.2013. 22:24 ] @
Code:
friend complex operator+(const complex);  // U KLASI


complex operator+(const complex r);  // VAN KLASE


Zašto ne radi napisana varijanta?????
[ Burgos @ 17.11.2013. 22:33 ] @
Ne radi iz istog razloga kao u tvom prethodnom pitanju (onom na koji sam ti odgovorio). Binarni operator ocekuje dva operanda. Ako definises clanicu klase kao:

Code:
class complex
{
    complex operator+(const complex& drugi); // ne treba ti friend ovde, jer je ova funkcija clanica klase
};


ova metoda prima dva argumenta - prvi je this pokazivac, a drugi je argument drugi.

Funkcija neclanica

Code:
complex operator+(const complex& r);


prima samo jedan argument (nema podrazumevanog this u ovom slucaju) i ne moze da se prevede, jer binarni operator ocekuje dva operanda.