Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2011, 18:27   #1
Leo_ня
 
Регистрация: 03.01.2010
Сообщений: 7
По умолчанию Перегрузка операторов

Есть класс "Packet", он должен принимать данные различных типов и добавлять их в массив (буфер).

Для удобства хотелось бы, чтобы добавлять данные можно было с помощью оператора "+". То есть так:

Код:
Packet pck;
pck += (WORD)0x1111 + "test" + (BYTE)0x05 + "asdf";
И для каждого типа данных (BYTE, WORD, DWORD, char *) в классе нужно перегрузить операторы.

Возможно ли это? Подскажите, пожалуйста.
Leo_ня вне форума Ответить с цитированием
Старый 09.04.2011, 22:10   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Да. Добавляйте соответствующие методы:
Код:
Packet& operator += (WORD);
Packet& operator += (BYTE);
...
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 10.04.2011, 10:39   #3
Leo_ня
 
Регистрация: 03.01.2010
Сообщений: 7
По умолчанию

А что делать с тем, что при вычислении правой части будут вызываться обработчики операторов не моего класса? Ведь они не смогут посчитать, например, "(BYTE)0x05 + "asdf";".

Придётся создавать классы своих типов данных (MyInt, MyWord, MyDword, MyChar), в которых перегружены операторы?
Leo_ня вне форума Ответить с цитированием
Старый 10.04.2011, 12:33   #4
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Leo_ня Посмотреть сообщение
А что делать с тем, что при вычислении правой части будут вызываться обработчики операторов не моего класса? Ведь они не смогут посчитать, например, "(BYTE)0x05 + "asdf";".

Придётся создавать классы своих типов данных (MyInt, MyWord, MyDword, MyChar), в которых перегружены операторы?
Не будет так. Смотрите, что происходит:
Код:
pck += (WORD)0x1111 + "test" + (BYTE)0x05 + "asdf";
//сначала прибавляется (WORD)0x1111, остается
pck += "test" + (BYTE)0x05 + "asdf";
//прибавляется "test", остается
pck += (BYTE)0x05 + "asdf";
//прибавляется (BYTE)0x05, остается
pck += "asdf";
//прибавляется "asdf", готово!
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 10.04.2011, 15:06   #5
Leo_ня
 
Регистрация: 03.01.2010
Сообщений: 7
По умолчанию

Не вышло. Сначала вычисляется то, что после знака равно.

Код:
pck += "test" + "1234";
Даёт ошибку:

Код:
error C2110: '+' : cannot add two pointers
То есть, складываются "test" и "1234".
Leo_ня вне форума Ответить с цитированием
Старый 10.04.2011, 15:11   #6
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Ну, возможно. Тогда просто делайте так:
Код:
pck = pck + ...
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 10.04.2011, 15:42   #7
Leo_ня
 
Регистрация: 03.01.2010
Сообщений: 7
По умолчанию

Получается, простым способом реализовать это не получится?
Хотелось бы именно "элемент + элемент2 + элемент3"...
Leo_ня вне форума Ответить с цитированием
Старый 10.04.2011, 15:52   #8
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Leo_ня Посмотреть сообщение
Получается, простым способом реализовать это не получится?
Хотелось бы именно "элемент + элемент2 + элемент3"...
Как вариант - сделайте конструктор преобразования для своего класса, который будет неявным образом преобразовывать "элемент1", "элемент2" и т.д. к типу Packet, а складываться будут уже полученные объекты.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 11 20.11.2010 13:23
Перегрузка операторов(С++) Сергей AfeR Помощь студентам 0 16.06.2010 18:34
Перегрузка операторов raspberry Общие вопросы C/C++ 2 06.04.2010 00:19
Перегрузка операторов. Macb3th Общие вопросы C/C++ 5 01.04.2010 21:14
Перегрузка операторов, Организация перегрузки операторов chagin_yav Помощь студентам 2 12.05.2008 09:15