Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
32 / 32 / 2
Регистрация: 07.08.2011
Сообщений: 89

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

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

Студворк — интернет-сервис помощи студентам
Допустим есть класс
Code
1
2
3
4
5
6
7
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);}
};
т.е. определены побитовое хранение булевых значений, их чтение и запись.
А теперь вопрос: Существует ли способ определить операторы так, чтобы работал следующий код:
Code
1
2
3
MyBool a;
if(a[0])
    a[1]=true;
Соответственно a[0] делает GetVal(0), a[1]=true делает SetVal(1,true)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2011, 19:46
Ответы с готовыми решениями:

Как возможно изменить даты создания файлов на сервере? И Возможно ли это?
Добрый день! Нужна помощь. Волею судьбы я был вовлечен в судебную тяжбу с веб-студией, которая мне создавала сайт. Камнем...

Кто может это переработать для андроида? И вообще это возможно?
програма на CLI (windows form)

Как это сделать , если это возможно, сам не уверен
Помогите, как это сделать Пример В таблице Excel я ввожу какую нибудь формулу (Sin(x), a не =Sin(x)), так как мне нужно в этой ячейки...

56
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.08.2011, 14:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Teravisor Посмотреть сообщение
Или я вас не понял, или я этого не знал. Где почитать можно в надежных источниках, чтобы определиться? Если ссылка на стандарт, то пункт в нем, пожалуйста, а то он большой.

Зависит от динамического массива и компилятора: скорость доступа к элементу vector<int> a; и скорость доступа к int* a; будет разной, можно посмотреть уже проведенные замеры в интернете.
1. В стандарте ни слова по этому поводу нет. Это уже особенности реализации оси и платформы. Если вы работаете в винде, то по умолчанию винда выделяет под стек (то есть под все локальные переменные) стек размером 1 метр. Локальный массив - это такая же локальная переменная, как и все остальные, поэтому размещается в стеке. В то время как глобальный массив размещается с static storage и занимает столько места, сколько нужно. Аналогично динамический размещается в куче и занимает столько места, сколько нужно. В обоих случаях используется виртуальная память.
Про никсы не скажу - не работал. Но про стек должно быть так же.
2. Вам ничто не мешает иметь доступ к элементу вектора по указателю:
C++
1
2
vector<int> v(N);
int *p = &v[0];
0
Заблокирован
08.08.2011, 19:02
Цитата Сообщение от Kastaneda Посмотреть сообщение
вот быдлокод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class MyBool{
int data;
unsigned last_mask;
public:
    MyBool(int d=0):data(d),last_mask(0){}
 
    MyBool& operator[](int num){
        last_mask=1<<num;
        return *this;
    }
 
    void operator=(bool b){
        data=(b ? data|last_mask : data&(~last_mask));
    }
 
    operator bool(){
        return data&last_mask;
    }
    friend std::ostream& operator<<(std::ostream &os,MyBool ob){
        return os<<std::hex<<ob.data;
    }
};
 
 
 
int main(){
    MyBool mb;
    std::cout<<mb<<std::endl;
    mb[0]=true;
    mb[1]=true;
    mb[2]=true;
    std::cout<<mb<<std::endl;
    if(mb[0])
        std::cout<<"mb[0] = true"<<std::endl;
    else std::cout<<"mb[0]=false"<<std::endl;
    return 0;
}
Может кто-нибудь красивее сделает?
Класс написан очень плохо. Во-первых, он совершенно не работает для константных объектов. Во-вторых, в нем нарушена семантика оператора присваивания, когда вместо ссылки на класс возвращается void. В операторе вывода в качестве параметра принимается ссылка на объект, а не константная ссылка на объект. Поэтому после применения этого оператора ничего нельзя сказать о состоянии объекта.
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
08.08.2011, 19:07
Цитата Сообщение от Сыроежка Посмотреть сообщение
В операторе вывода в качестве параметра принимается ссылка на объект, а не константная ссылка на объект.
Ты про operator<<? Смотрел, смотрел, но так и не понял, о какой "неконстантной ссылке" ты говоришь. MyBool там по значению передаётся.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
08.08.2011, 19:20
Цитата Сообщение от Сыроежка Посмотреть сообщение
В операторе вывода в качестве параметра принимается ссылка на объект, а не константная ссылка на объект. Поэтому после применения этого оператора ничего нельзя сказать о состоянии объекта.
вы не поверите, но даже в случае константной ссылки ничего нельзя уверенно сказать про объект
2
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
08.08.2011, 19:46
Цитата Сообщение от Сыроежка Посмотреть сообщение
Класс написан очень плохо. Во-первых...
Я ж говорю - быдлокод. Вопрос был "возможно ли это на С++", я показал, что возможно, и не более того.
0
Заблокирован
08.08.2011, 19:52
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ты про operator<<? Смотрел, смотрел, но так и не понял, о какой "неконстантной ссылке" ты говоришь. MyBool там по значению передаётся.
Я привык, что оператор вывода использует объекты по ссылке, а не по значению, поэтому особенно не всматривался в объявление. Но в людбом случае возникает вопрос, почему объект передается по значению, а не по константной ссылке?
0
08.08.2011, 19:57

Не по теме:

Цитата Сообщение от Сыроежка Посмотреть сообщение
Я привык, что оператор вывода использует объекты по ссылке, а не по значению, поэтому особенно не всматривался в объявление.
Я привык, что адекватные критики всё-таки всматриваются в то, что они критикуют :)
Цитата Сообщение от Сыроежка Посмотреть сообщение
Но в людбом случае возникает вопрос, почему объект передается по значению, а не по константной ссылке?
Потому, что автору не обещали оплаты :)

0
Заблокирован
08.08.2011, 19:58
Цитата Сообщение от alex_x_x Посмотреть сообщение
вы не поверите, но даже в случае константной ссылки ничего нельзя уверенно сказать про объект
Выаблуждаетесь! В противном случае весь существующий код некорректный. Вы просто путатете две вещи: первое - это то, что кто-то может писать некорректный код, и отчего никто не застрахован, и второе - соглашение об интерфейсе между программистами. Если вы следуете соглашениям об интерфейсе, то вы полагаетесь на то, что объект не будет изменен.
0
Заблокирован
08.08.2011, 20:03
Цитата Сообщение от Сыроежка Посмотреть сообщение
Выаблуждаетесь! В противном случае весь существующий код некорректный. Вы просто путатете две вещи: первое - это то, что кто-то может писать некорректный код, и отчего никто не застрахован, и второе - соглашение об интерфейсе между программистами. Если вы следуете соглашениям об интерфейсе, то вы полагаетесь на то, что объект не будет изменен.
C++
1
friend std::ostream& operator<<(std::ostream &os,MyBool& ob)
C++
1
friend std::ostream& operator<<(std::ostream &os,const MyBoo&l ob)
в обоих случаях используется константная ссылка, но в первом случае нельзя сказать что объект не будет изменён

Добавлено через 1 минуту
константная ссылка как гритца не панацея, ссылка на константу - другое дело
0
08.08.2011, 20:09

Не по теме:

Цитата Сообщение от LosAngeles Посмотреть сообщение
константная ссылка как гритца не панацея, ссылка на константу - другое дело
Вопрос о корректности термина "константная ссылка" я бы предложил обсуждать в разделе "Священные войны". Надоело уже видеть это здесь.
Сыроежка говорил про другое, хотя наш кэп стареет :)

0
Заблокирован
08.08.2011, 20:16
Цитата Сообщение от LosAngeles Посмотреть сообщение
C++
1
friend std::ostream& operator<<(std::ostream &os,MyBool& ob)
C++
1
friend std::ostream& operator<<(std::ostream &os,const MyBoo&l ob)
в обоих случаях используется константная ссылка, но в первом случае нельзя сказать что объект не будет изменён

Добавлено через 1 минуту
константная ссылка как гритца не панацея, ссылка на константу - другое дело
Знаете, это вы не по адресу обратились! Это уже вопрос относительно вашим знанй. Едли бы вы читали стандроат, то бы знали, что в нем испольбзуется термин "константная ссылка", и все понимают, что под тэтим имеется в виду. А так как вы стандларт не читали, то у вас и возникает такая путаница.
0
Заблокирован
08.08.2011, 20:33
Цитата Сообщение от Сыроежка Посмотреть сообщение
Едли бы вы читали стандроат
если б ты учил в школе русский, то наверняка бы знал, что в фразе "константная ссылка на объект" прилагательное "константная" относится к ссылке, а не объекту

а то что люди пишущие стандарт не в ладах с английским или экономят бумагу для меня не аргумент
0
Заблокирован
08.08.2011, 20:45
Цитата Сообщение от LosAngeles Посмотреть сообщение
если б ты учил в школе русский, то наверняка бы знал, что в фразе "константная ссылка на объект" прилагательное "константная" относится к ссылке, а не объекту

а то что люди пишущие стандарт не в ладах с английским или экономят бумагу для меня не аргумент
Как сказал один киногерой, я люблюд умных людей, но не тлюблю умников. Я вам еще раз повторяю, вмесвто того, чтобы умничать, вы бы лучше заглянули в стандарт языка С++, и ознакомилдись бы с тем, что там используются термины const reference и non-const reference.

Вы можете и дальше графомански рассуждать, но что касается меня, то я придерживаюсь тех терминов, которые используются в станларте. И те, кто писал стандарт, хорошо понимают, о чем идет речь, когда используются эти термины.

Вы считаете себя всех умнее. Мне же в голову прихоидт поговорка: /"дуракам закон не писан/".

Добавлено через 2 минуты
Цитата Сообщение от LosAngeles Посмотреть сообщение
если б ты учил в школе русский, то наверняка бы знал, что в фразе "константная ссылка на объект" прилагательное "константная" относится к ссылке, а не объекту

а то что люди пишущие стандарт не в ладах с английским или экономят бумагу для меня не аргумент
Как сказал один киногерой, я люблюд умных людей, но не тлюблю умников. Я вам еще раз повторяю, вмесвто того, чтобы умничать, вы бы лучше заглянули в стандарт языка С++, и ознакомилдись бы с тем, что там используются термины const reference и non-const reference.

Вы можете и дальше графомански рассуждать, но что касается меня, то я придерживаюсь тех терминов, которые используются в станларте. И те, кто писал стандарт, хорошо понимают, о чем идет речь, когда используются эти термины.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
08.08.2011, 22:11
Цитата Сообщение от Сыроежка Посмотреть сообщение
Выаблуждаетесь! В противном случае весь существующий код некорректный. Вы просто путатете две вещи: первое - это то, что кто-то может писать некорректный код, и отчего никто не застрахован, и второе - соглашение об интерфейсе между программистами. Если вы следуете соглашениям об интерфейсе, то вы полагаетесь на то, что объект не будет изменен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int f( const int& a )
{
   return const_cast<int&>( a ) = 123;
}
 
int main()
{
   int a = 100;
   f( a ); 
   printf( "%d\n", a );
   return 0;
}
код корректен...
и здесь даже гарантировано define behavior
0
Заблокирован
09.08.2011, 01:55
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
int f( const int& a )
{
   return const_cast<int&>( a ) = 123;
}
 
int main()
{
   int a = 100;
   f( a ); 
   printf( "%d\n", a );
   return 0;
}
код корректен...
и здесь даже гарантировано define behavior
Еще Страустроп сказал, правда в более мягкой форме, что у С++ нет защиты от дураков! Если вы объявляете интерфейс, что в функцию передается константная ссылка на объект, то вы несете полную ответсвеннось, как говорится, за "свой базар". Интерфейс - это ваш договор между вами и пользователем вашей функции. И ни вы, ни пользователь вашей функции не должны нарушать этот договор. Вы в своем ответе привели мою цитату, но совершенно не поняли, что я там сказал! Порой создается впечатление, что иногда ведется диалог с неадекватными людьми, которые не в состоянии понять простые вещи, которые им говорят.

Я вам еще раз повторяю, если с первого раза до вас не доходит, что если бы люди не следовали соглашениям, весь написанный код на С++ был бы некорректным! Вы не могли бы использовать ни одной стандартной функции, так как никто бы вам не давал гарантию, что константные данные в ней не изменятся. Поэтому еще раз перечитайте мое предыдущее сообщение, прежде чем что-то мне в ответ писать. В нем все сказано.
0
09.08.2011, 02:28

Не по теме:

Сыроежка, вы правда думаете что сказали что-то новое и необычное?
Смотрите, повторится история как с другими форумами

0
09.08.2011, 08:39
Лучший ответ Сообщение было отмечено как решение

Решение

Не по теме:


Сыроежка, тебя кто в детстве обидел?! Не первый раз замечаю, что ты регулярно переходишь на оценку личности вместо конкретной оценки кода со ссылкой на стандарт. Причем оценка у тебя постоянно одинаковая: собеседник ничего не знает, и потому дурак.

3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2011, 08:39

К сыну в реанимацию забежал врач и заявил: «Это мой сын!». Возможно ли это?
Отец и сын попали в аварию. Отец скончался в больнице. К сыну в реанимацию забежал врач и заявил: «Это мой сын!». Возможно ли это? ...

Возможно ли это и если да как это сделать?
Имеется удаленный сервер с управлением через KVM и с операционной системой windows server 2012, ее надо сменить на любую операционку...

Как это возможно? И возможно ли?
Здравствуйте. есть файлы files.php, textbooks.php и т. д. GET-параметры (например): files.php?show=music, files.php?show=photo,...

Это возможно?
Вобщем тут такое дело. Я создал шрифт под свой почерк. очень похожий. Но есть одна проблема что когда распечатываеш в Word этот текст...

БД на Java, возможно ли это?
Господа, просветите меня или поправьте новичка=) Хотелось бы узнать, познать. Можно ли сделать базу данных локальной, то есть без...


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

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru