Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как правильно пергрузить operator +=


Автор: bel_nikita 19.5.2004, 10:23
Как правильно пергрузить operator += относительно какой-нить стуктуры?

Автор: Royan 19.5.2004, 10:36
обычно есть объект которому присваивают значение, чтобы это сделать возвращают ссылку на этот обект,

class A{
....
int nVal;
....
}

//В реализации operator +=
return &nVal;

Автор: Гость_v_ez 19.5.2004, 10:37
а в MSDN об этом между прочим написано....;)))
а вообще приблизительно так будет:
struct A{
A(int m_nATmp){m_nA = m_nATmp;}
void operator +=(A& m_rOb){m_nA += m_rOb.m_nA;}
int m_nA;
};
ну и его использование:
A a1(5), a2(6);
a1 += a2; //a1.m_nA станет равно 11

Автор: Yuri Burger 19.5.2004, 13:52
Цитата(bel_nikita @ 19.5.2004, 10:23)
Как правильно пергрузить operator += относительно какой-нить стуктуры?

class A
{
...
A& operator+=(const A& rhs){...;return *this;}
...
};

Ссылку возвращать нужно дабы твой тип вел себя подобно встроеным:

для int разрешено делать a=(a+=10)

Автор: Sined 19.5.2004, 19:28
Начну с традиционного а почему не?
так например
typedef struct _struct
{
d_ata data;
struct _struct &operator+=(struct _struct &b);
}sd,*psd

sd& sd::operator+=(sd& b)
{
d_ata+=b.d_ata;
return *this;
}

Не знаю почему сложилось мнение, что структура не поддерживает this. Может по стандарту это и так, но и gcc и Borland и MCW все поддерживабт прекрасно.

Автор: Yuri Burger 20.5.2004, 10:23
Цитата(Sined @ 19.5.2004, 19:28)
Начну с традиционного а почему не?
так например
typedef struct _struct
{
d_ata data;
struct _struct &operator+=(struct _struct &b);
}sd,*psd

sd& sd::operator+=(sd& b)
{
d_ata+=b.d_ata;
return *this;
}

Не знаю почему сложилось мнение, что структура не поддерживает this. Может по стандарту это и так, но и gcc и Borland и MCW все поддерживабт прекрасно.

Вопрос культуры - классы на то и есть, что имеют поведение. Структуры исторически - это данные, организованные определенным образом.

Хотя, в C++ struct означает class с public по дефолту, тобишь:

struct A
{
...
};

идентично

class A
{
public:
...
};

Поэтому ничто не мешает делать так как ты показал, но это будет дурной тон ;)

Да, еще у тебя объявление архаическое ;) зачем тебе typedef там?

И еще, принимать должно const&

Автор: Sined 20.5.2004, 10:30
Цитата
Да, еще у тебя объявление архаическое ;) зачем тебе typedef там?

Привык.
Цитата
И еще, принимать должно const&

Осталось только застрелиться. rolleyes.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)