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


Автор: bel_nikita 21.3.2004, 19:12
Вопрос в следующем. Есть струтура:
Код
struct DspAnswerHeader{
/*000*/ unsigned long   UniqueNumber;       // UniqueNumber
/*004*/ unsigned short Command;            // Command
/*006*/ unsigned short ErrorNumber;        // Number of error
 DspAnswerHeader& operator = (int const &Data)
 {
   UniqueNumber=Data;
   Command     =Data;
   ErrorNumber =Data;
   return *this;
 }
};

Есть перегруженный оператор =. Использую для обнуления.
Почему так работает:
Код
   DspAnswerHeader Header;
   Header=0;

А так нет:
Код
DspAnswerHeader Header=0;

Автор: Дрон 21.3.2004, 19:18
В первом случае у тебя идёт присваивание. И всё действительно прекрасно работает.

Во втором случае у тебя инициализация, т.е. должен вызываться конструктор с параметром int.
А он у тебя не определён.
Код
DspAnswerHeader::DspAnswerrHeader(int const &Data){
 UniqueNumber=Data;
  Command     =Data;
  ErrorNumber =Data;
}

Автор: bel_nikita 22.3.2004, 00:21
А, ну, понятно. Тогда глупо мне вообще оператор перегружать.

Автор: sdoc 22.3.2004, 23:14
оператор перегружать никогда не глупо smile.gif если ты конечно пользоваться хочешь этим - например ты можешь даже и не знать что это нужно. Если ты возвращаешь из функции это по значению - то тогда он используется. Если структура содержит указатели, то по умолчанию будет сделана побитовая копия - а желательно сделать глубокую...

Автор: Guest 23.3.2004, 09:27
sdoc

Автор: bel_nikita 23.3.2004, 09:35
sdoc
Цитата
Если ты возвращаешь из функции это по значению - то тогда он используется.

Ну, вот, пример:
Код
DspAnswerHeader Func(int const &Par)
{
  DspAnswerHeader Data;
 // что-то делаем
 return Data;
}

И зачем мне перегружать оператор присваивания?
Цитата
Если структура содержит указатели, то по умолчанию будет сделана побитовая копия - а желательно сделать глубокую...
По-подробнее можно?

Может, ты имел ввиду конструктор копий?

Автор: Гость_sdoc 23.3.2004, 11:12
оопс!
ты прав(а) - тут используется конструктор.
но и я тоже прав - если ты уже делаешь конструктор копий, то тогда может лучше сделать оператор присваивания - и использовать его в конструкторе!...

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