Форум программистов, компьютерный форум CyberForum.ru

Возможно ли это на с++? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
07.08.2011, 19:46     Возможно ли это на с++? #1
Допустим есть класс
Код
class MyBool{
int data;
//Читаем бит номер num
bool GetVal(num){return data&(1<<num);}
//Записываем в бит номер num значение val
void SetVal(num,val){val?data|=(1<<num):data&=~(1<<num);}
};
т.е. определены побитовое хранение булевых значений, их чтение и запись.
А теперь вопрос: Существует ли способ определить операторы так, чтобы работал следующий код:
Код
MyBool a;
if(a[0])
    a[1]=true;
Соответственно a[0] делает GetVal(0), a[1]=true делает SetVal(1,true)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2011, 19:46     Возможно ли это на с++?
Посмотрите здесь:

C++ Структура в классе, это возможно?
C++ как можно сделать это? если вообще возможно (не задача)
C++ Доступ к данным в *.mdb посредством OLE DB -- это возможно?
C++ _TCHAR szTestString[] = как сделать тут ввод с клавиатуры и возможно ли это
Возможно ли это заменить циклом? C++
C++ Доступ к переменной только из двух функций. Возможно ли это?
Как это возможно сделать? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
07.08.2011, 19:50     Возможно ли это на с++? #2
Да. Такое возможно.
Смотрите в сторону "перегрузка операторов в с++"
LosAngeles
Заблокирован
07.08.2011, 19:51     Возможно ли это на с++? #3
vector<bool> специализация вектора
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
07.08.2011, 19:54  [ТС]     Возможно ли это на с++? #4
vector<bool> не годится т.к. bool по умолчанию например в студии определяется как byte, а это в 8 раз больше нужного.
Сейчас конечно еще раз почитаю про перегрузку, но не факт что найду этот момент.
Bers
Заблокирован
07.08.2011, 19:57     Возможно ли это на с++? #5
Цитата Сообщение от Teravisor Посмотреть сообщение
vector<bool> не годится т.к. bool по умолчанию например в студии определяется как byte, а это в 8 раз больше нужного.
Сейчас конечно еще раз почитаю про перегрузку, но не факт что найду этот момент.
перегрузка operator []
перегрузка operator=
LosAngeles
Заблокирован
07.08.2011, 19:58     Возможно ли это на с++? #6
Цитата Сообщение от Teravisor Посмотреть сообщение
vector<bool> не годится т.к. bool по умолчанию например в студии определяется как byte, а это в 8 раз больше нужного.
Сейчас конечно еще раз почитаю про перегрузку, но не факт что найду этот момент.
в vector<bool> bool - 1 бит, он специализирован
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
07.08.2011, 20:01  [ТС]     Возможно ли это на с++? #7
Цитата Сообщение от Bers Посмотреть сообщение
перегрузка operator []
перегрузка operator=
И как перегрузить оператор =, если оператор [] должен возвращать bool, а оператор = не имеет возможности получить параметр, передаваемый в оператор []?
Вопрос не так прост, как кажется.

Цитата Сообщение от LosAngeles Посмотреть сообщение
в vector<bool> bool - 1 бит, он специализирован
Причины две: во-первых, я хочу понять этот момент, а во-вторых, можно погуглить на "vector<bool>" и первая же ссылка покажет почему он плох.
LosAngeles
Заблокирован
07.08.2011, 20:04     Возможно ли это на с++? #8
Цитата Сообщение от Teravisor Посмотреть сообщение
Причины две: во-первых, я хочу понять этот момент, а во-вторых, можно погуглить на "vector<bool>" и первая же ссылка покажет почему он плох.
да? и почему? озвучивай только те причины, которые мешают тебе использовать его конкретно в этом примере
Сыроежка
Заблокирован
07.08.2011, 20:04     Возможно ли это на с++? #9
Цитата Сообщение от Teravisor Посмотреть сообщение
vector<bool> не годится т.к. bool по умолчанию например в студии определяется как byte, а это в 8 раз больше нужного.
Сейчас конечно еще раз почитаю про перегрузку, но не факт что найду этот момент.
bool не определяется как byte. Оно может определяться разными способами. Представление объектов типа bool в стандарте не оговорено. Так что не следует расчитывать на то, что bool будет соответствовать по размеру байту.
LosAngeles
Заблокирован
07.08.2011, 20:05     Возможно ли это на с++? #10
bool& должен возвращать [] если хочешь с нуля писать
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
07.08.2011, 20:14  [ТС]     Возможно ли это на с++? #11
Цитата Сообщение от LosAngeles Посмотреть сообщение
да? и почему? озвучивай только те причины, которые мешают тебе использовать его конкретно в этом примере
Больше любопытство. Но по сути, мне интересно было именно поставить вопрос про это. А что если мне то же самое понадобится делать, но уже по два бита? Это - всего лишь один пример.

Цитата Сообщение от Сыроежка Посмотреть сообщение
bool не определяется как byte. Оно может определяться разными способами. Представление объектов типа bool в стандарте не оговорено. Так что не следует расчитывать на то, что bool будет соответствовать по размеру байту.
Вот именно потому, что и не оговорено, нигде нет гарантии, что отводится именно бит.

Цитата Сообщение от LosAngeles Посмотреть сообщение
bool& должен возвращать [] если хочешь с нуля писать
и как вы себе представляете ссылку на второй бит этого инта?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
07.08.2011, 20:16     Возможно ли это на с++? #12
std::bitset запретили чтоли?
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
07.08.2011, 20:18  [ТС]     Возможно ли это на с++? #13
Цитата Сообщение от alex_x_x Посмотреть сообщение
std::bitset запретили чтоли?
Я на него не набредал еще. Сейчас посмотрю, спасибо.
LosAngeles
Заблокирован
07.08.2011, 20:20     Возможно ли это на с++? #14
ты уж сам определись что ты хочешь

Цитата Сообщение от Teravisor Посмотреть сообщение
побитовое хранение булевых значений
в таком случае о таком синтаксисе забудь
Цитата Сообщение от Teravisor Посмотреть сообщение
a[1]=true;
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
07.08.2011, 20:21  [ТС]     Возможно ли это на с++? #15
Цитата Сообщение от LosAngeles Посмотреть сообщение
ты уж сам определись что ты хочешь


в таком случае о таком синтаксисе забудь
Я изначально спросил - возможно ли это. Все равно, спасибо за внимание.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.08.2011, 21:03     Возможно ли это на с++? #16
Цитата Сообщение от LosAngeles Посмотреть сообщение
в таком случае о таком синтаксисе забудь
почему это? перегрузка оператора решает все
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
07.08.2011, 21:11  [ТС]     Возможно ли это на с++? #17
Цитата Сообщение от Maxwe11 Посмотреть сообщение
почему это? перегрузка оператора решает все
А можно пример описания, пожалуйста? Или хотя бы идею как именно перегрузить.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
07.08.2011, 21:12     Возможно ли это на с++? #18
Цитата Сообщение от Maxwe11 Посмотреть сообщение
почему это? перегрузка оператора решает все
речь идем о том, что он хочет хранить целое значения (имея доступ по битам), а в операторе хочет возвращать через bool&
естесственно это так работать не будет
но можно реализовать как в std::bitset и в контейнерах вообще - возвращать reference, у которой есть перегрузка operator= и оператора приведения типа, a класс reference связан с контейнером std::bitmap
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
07.08.2011, 21:25  [ТС]     Возможно ли это на с++? #19
Кстати, а насколько подход контейнеров к хранению битов "хуже" чем получение битов в лоб из инта в плане производительности?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2011, 21:27     Возможно ли это на с++?
Еще ссылки по теме:

C++ Partition для map. Возможно ли это?
C++ Выскакивают ошибки конвертации одного типа в другой, как возможно это исправить?
C++ Как записать в вектор структуру? Это вообще возможно сделать?
Рекурсивная программа. Составить пары из группы, если это возможно C++
C++ Заменить оператор goto на цикл, если это возможно

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
07.08.2011, 21:27     Возможно ли это на с++? #20
возможно/невозможно
Возможно, только имхо - быдлокод получится, а вот, чтоб "красиво" было, по-моему не выйдет.
Yandex
Объявления
07.08.2011, 21:27     Возможно ли это на с++?
Ответ Создать тему
Опции темы

Текущее время: 11:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru