Portál AbcLinuxu, 11. května 2025 07:06
c1 = 2 * c1
Opačne čiže c1*2
funguje bezproblémovo, ale neviem ako spraviť aby to fungovalo aj naopak, neviem ako to zapísať. Ďakujem za pomoc
Je potřeba, aby vaše třída měla konstruktor, který půjde volat s jedním reálným parametrem, tj. např.
class Cplx { protected: double x; double y; public: Cplx(double xx=0.0, double yy=0.0) : x(xx), y(yy) {} };
Complex operator *(const double &left, const Complex &right);
Complex operator *(Complex &c1, Complex &c2) Complex operator *(const double &num, Complex &c) Complex operator *(Complex &c, const double &num)Som z toho trošku jeleň, na googli nemožem nič rozumne k tomu najsť niečo čo by riešilo všetky pripady ako potrebujem ja... Ako som pochopil tak to nemožem všetko nadefinovať ako metody, resp. v tele triedy ale ako friend funkcie no ani tak mi to nefunguje. Časť triedy:
class Complex { public: Complex(){}; Complex(double re, double im); friend Complex operator * (Complex &c1,const double &num) ; friend Complex operator * (const double &num, Complex &c1) ; friend Complex operator * (Complex &c1, Complex &c2); void Display(); private: double re; double im ; };Ďakujem za pomoc :)
V tom případě ukažte, co přesně jste zkoušel, protože to funguje:
#include <iostream> class C { public: double x; double y; C(double xx=0.0, double yy=0.0) : x(xx), y(yy) {} }; inline const C operator * (const C& a, const C& b) { return C(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x); } int main() { C a(3,5); C b; b = 2 * a; std::cout << b.x << " + " << b.y << "i\n"; return 0; }
Complex operator *(const Complex &c1, const Complex &c2) Complex operator *(const double &num, const Complex &c) Complex operator *(const Complex &c, const double &num)A napiš to mimo tělo té třídy, jak radil Sten.
double
ta konstantní reference trochu overkill?
double
), znamená to zdržení na jeho dereferencování. V praxi je ale samozřejmě otázka, co z toho v konkrétním případě udělá kompilátor.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.