Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 2.618 pregleda

Najnovija ↓

a.operator+(b) ne radi 17.11.2013. u 18:57 · pre 157 meseci #1
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)?

Re: a.operator+(b) ne radi 17.11.2013. u 19:05 · pre 157 meseci #2
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?!
Re: a.operator+(b) ne radi 17.11.2013. u 19:27 · pre 157 meseci #3
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;
}

 
Sviđa mi se1
Re: a.operator+(b) ne radi 17.11.2013. u 23:24 · pre 157 meseci #4
Code:
friend complex operator+(const complex);  // U KLASI


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


Zašto ne radi napisana varijanta?????
Re: a.operator+(b) ne radi 17.11.2013. u 23:33 · pre 157 meseci #5
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.
Sviđa mi se1
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme