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

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

07.08.2011, 19:46. Показов 4965. Ответов 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
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru