Я не знаю оператора
.->.
Операторы
::,
. и
.* нельзя перегружать потому, что они оперируют не значениями, а именами. Технически это реализовать конечно можно, но при этом могут возникнуть некоторые проблемы [Страуструп, 94].
-- Вс окт 11, 2009 00:11:23 --2
vencoСогласитесь, ведь вообще поля
Re,
Img должны быть
private, а перегруженный оператор тогда должен быть
friend.
Т.е. лучше писать примерно так:
Код:
#include <iostream>
struct Complex
{
friend std::ostream &operator <<
(
std::ostream &Stream,
const Complex &Number
)
{
Stream <<
'(' << Number.Real << ", "
<< Number.Imaginary << ')';
return Stream;
}
explicit Complex(const double Real=0, const double Imaginary=0)
:Real(Real), Imaginary(Imaginary) {}
Complex(const Complex &Number)
:Real(Number.Real), Imaginary(Number.Imaginary) {}
...
private:
double Real, Imaginary;
};
Хотя можно просто определить соответствующие
public-accessor'ы (лучше
inline)
Re() и
Img().
2
mycodingЦитата:
Ребята, а как перегрузить cout << комплексное число.
Ещё можно так:
Код:
#include <string>
#include <sstream>
#include <iostream>
struct Complex
{
operator std::string()
{
std::ostringstream String;
String <<
'(' << Real << ", "
<< Imaginary << ')';
return String.str();
}
...
private:
double Real, Imaginary;
};
...
int main(void)
{
Complex Number;
std::cout << (std::string)Number;
return 0;
}
Но лучше так не делать.
-- Вс окт 11, 2009 01:19:18 --2
SpookПод [Страуструп, 94] я подразумевал написанную в 94-ом книжонку B. Stroustrup, The Design and Evolution of C++.