Portál AbcLinuxu, 10. listopadu 2025 17:04
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.