#6 ondra.holub
Můžeš to udělat jako metodu třídy complex, ale nepůjde to používat "normálně":
#include <iostream>
class complex {
private:
double re, im;
public:
complex() {}
complex(double r, double i) {re = r; im = i;}
double Re() const { return re; }
double Im() const { return im; }
std::ostream& operator<<(std::ostream& os) const { os << "re = " << re << " im = " << im; return os; }
};
int main()
{
complex c(1.2, 3.4);
c << std::cout << '\n'; // To asi neni to, co jsme chteli
}
Nebo to napsat zvlášť:
#include <iostream>
class complex {
private:
double re, im;
public:
complex() {}
complex(double r, double i) {re = r; im = i;}
double Re() const { return re; }
double Im() const { return im; }
};
std::ostream& operator<<(std::ostream& os, const complex& c)
{
os << "re = " << c.Re() << " im = " << c.Im();
return os;
}
int main()
{
complex c(1.2, 3.4);
std::cout << c << '\n'; // To uz vypada normalne
}
Nebo zavést kamarádšoft klíčovým slovem friend:
#include <iostream>
class complex {
private:
double re, im;
public:
complex() {}
complex(double r, double i) {re = r; im = i;}
double Re() const { return re; }
double Im() const { return im; }
friend std::ostream& operator<<(std::ostream& os, const complex& c);
};
std::ostream& operator<<(std::ostream& os, const complex& c)
{
os << "re = " << c.re << " im = " << c.im;
return os;
}
int main()
{
complex c(1.2, 3.4);
std::cout << c << '\n'; // To uz vypada normalne
}
Nebo zavést extra metodu a operátor definovat mimo třídu (to se hodí hlavně v případě hierarchicky zděděných tříd - pak stačí metodu Dump udělat virtuální a v každém potomkovi ji předefinovat):
#include <iostream>
class complex {
private:
double re, im;
public:
complex() {}
complex(double r, double i) {re = r; im = i;}
double Re() const { return re; }
double Im() const { return im; }
void Dump(std::ostream& os) const
{
os << "re = " << re << " im = " << im;
}
};
std::ostream& operator<<(std::ostream& os, const complex& c)
{
c.Dump(os);
return os;
}
int main()
{
complex c(1.2, 3.4);
std::cout << c << '\n'; // To uz vypada normalne
}
A určitě existuje spousta dalších možností, které mě nenapadly.