Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

a.operator+(b) ne radi

[es] :: C/C++ programiranje :: a.operator+(b) ne radi

[ Pregleda: 1965 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon a.operator+(b) ne radi17.11.2013. u 17:57 - pre 126 meseci
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)?

 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: a.operator+(b) ne radi17.11.2013. u 18:05 - pre 126 meseci
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?!
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: a.operator+(b) ne radi17.11.2013. u 18:27 - pre 126 meseci
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;
}

 
 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: a.operator+(b) ne radi17.11.2013. u 22:24 - pre 126 meseci
Code:
friend complex operator+(const complex);  // U KLASI


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


Zašto ne radi napisana varijanta?????
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.229.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: a.operator+(b) ne radi17.11.2013. u 22:33 - pre 126 meseci
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.
 
Odgovor na temu

[es] :: C/C++ programiranje :: a.operator+(b) ne radi

[ Pregleda: 1965 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.