• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Operator w klasie C++

Cloud VPS
0 głosów
368 wizyt
pytanie zadane 24 listopada 2016 w C i C++ przez ewazdomu Początkujący (320 p.)

Stworzyłem klasę liczb zespolonych i chciałem napisać też podstawowe działania, zacząłem od mnożenia no i gdy próbuję napisać ten operator wewnątrz klasy dostaję błąd o złej liczbie argumentów. 

error: 'Complex Complex::operator*(Complex, Complex)' must take either zero or one argument|

Klasa wygląda tak:
 

class Complex
{
private:
  double Real, Imag;
public:

 Complex (double Real=0, double Imag=0)
  {
    this->Real = Real;
    this->Imag = Imag;
  };


Complex operator* (Complex c1, Complex c2)
  {
    Complex c;
    c.Real = c1.Real * c2.Real - c1.Imag * c2.Imag;
    c.Imag = c1.Real * c2.Imag + c2.Real * c1.Imag;
    return c;
  }
};

Czytałem, że można napisać funkcję zaprzyjaźnioną do tej klasy i wtedy poza klasą przyjąć dwa argumenty dodając w moim przypadku w klasie Complex 

friend Complex operator*  (Complex c1, Complex c2);

a operator napisać po za klasą.

 

Napisałem z użyciem funkcji zaprzyjaźnionej jednak chciałbym to zrobić w klasie, jest jakaś możliwość bez używania funkcji zaprzyjaźnionej?

2 odpowiedzi

0 głosów
odpowiedź 24 listopada 2016 przez unknown Nałogowiec (39,560 p.)
Operator* zaimplementowany jako funkcja klasy powinien przyjmować tylko 1 argument.
0 głosów
odpowiedź 24 listopada 2016 przez criss Mędrzec (172,570 p.)

Tak samo jak "zwykłą" metode (bo operatory to metody/funkcje jak każde inne, tyle, że ich wywołania z poziomu kodu mogą wyglądać nieco inaczej):

class Complex 
{ 
   //... 
public: 
   Complex operator*(Complex c) 
   { 
      double r = Real * c.Real - Imag * c.Imag;
      double i = Imag * c.Real + Real * c.Imag;
      return Complex(r, i);
   } 
};

Btw. masz zbędny średnik po definicji konstruktora.

PS: zauważ, że operator możesz równie dobrze wywołać jak metode:

Complex c, c1;
auto c2 = c.operator*(c1);

 

Podobne pytania

0 głosów
0 odpowiedzi 211 wizyt
pytanie zadane 7 lutego 2017 w C i C++ przez czujek22 Dyskutant (7,670 p.)
0 głosów
1 odpowiedź 401 wizyt
pytanie zadane 20 października 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)
0 głosów
1 odpowiedź 215 wizyt
pytanie zadane 20 maja 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

62,833 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...