Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> oveloading operator = 
:(
    Опции темы
bel_nikita
Дата 21.3.2004, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Вопрос в следующем. Есть струтура:
Код
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;



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Дрон
Дата 21.3.2004, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



В первом случае у тебя идёт присваивание. И всё действительно прекрасно работает.

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



--------------------
Да. Именно так.
PM   Вверх
bel_nikita
Дата 22.3.2004, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



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


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
sdoc
Дата 22.3.2004, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 2.9.2003

Репутация: нет
Всего: нет



оператор перегружать никогда не глупо smile.gif если ты конечно пользоваться хочешь этим - например ты можешь даже и не знать что это нужно. Если ты возвращаешь из функции это по значению - то тогда он используется. Если структура содержит указатели, то по умолчанию будет сделана побитовая копия - а желательно сделать глубокую...
PM MAIL   Вверх
Guest
Дата 23.3.2004, 09:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











sdoc

  Вверх
bel_nikita
Дата 23.3.2004, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



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

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

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

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


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Гость_sdoc
Дата 23.3.2004, 11:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











оопс!
ты прав(а) - тут используется конструктор.
но и я тоже прав - если ты уже делаешь конструктор копий, то тогда может лучше сделать оператор присваивания - и использовать его в конструкторе!...
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0709 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.