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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
#1

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

07.08.2011, 19:46. Просмотров 2626. Ответов 56
Метки нет (Все метки)

Допустим есть класс
Код
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++
Здравствуйте! Подскажите, как этот фрагмент, можно заменить циклом? ... cout &lt;&lt; &quot;Введите количество часов: &quot;; cin &gt;&gt; hours1 &gt;&gt;...

Как это возможно сделать? - C++
Как это сделать на с++

Partition для map. Возможно ли это? - C++
Доброго времени суток, скажите пожалуйста, как применить parttition для map, если это возможно. Нашел информацию для vector-а, с map...

Доступ к переменной только из двух функций. Возможно ли это? - C++
Две функции, не члены класса, одна из них должна писать в переменную, другая эту переменную читать и больше ни где эта переменная должна...

Доступ к данным в *.mdb посредством OLE DB -- это возможно? - C++
Почти две недели бьюсь над этой проблемой. Перерыл весь инет, книжку по OLE DB купил... Не могу понять каким образом через OLE DB...

Заменить оператор goto на цикл, если это возможно - C++
Есть простой таймер #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main(){ ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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
Каратель
Эксперт С++
6553 / 3973 / 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
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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++
Привет всем! Как записать в вектор структуру? Это вообще возможно сделать? Надо, чтоб первая строка из файла записывалась в вектор,...

Рекурсивная программа. Составить пары из группы, если это возможно - C++
Ребят, срочно нужна помощь! Не прошу делать что-то за меня, просто подскажите способ реализации?

как можно сделать это? если вообще возможно (не задача) - C++
есть задача, на двумерный массив... вывел массив 5х5 с рандомными числами, нужно найти числа локального минимума, т.е. чтоб число было...

_TCHAR szTestString[] = как сделать тут ввод с клавиатуры и возможно ли это - C++
Вот текст программы // Osi.cpp: определяет точку входа для консольного приложения. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Выскакивают ошибки конвертации одного типа в другой, как возможно это исправить? - C++
Задача: Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке. Сведения о каждом...


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

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

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