Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 ... 3 4 5 [6] 7 8   Вниз
  Печать  
Автор Тема: Эврика  (Прочитано 145417 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #150 : 25-08-2009 04:40 » 

почему то как-то всё неубедительно Улыбаюсь

Цитата
по указателю можно узнать тип
- в рантайме ли? Всё равно же на этапе компиляции

Цитата
от пустого класса могут быть порождены наследники, а могу и не быть.
- если наследник - не пустой класс, то проблемы отпадают, а если тоже пустой, то проблем так же не появляется - ведь мемберов нет всё ещё

Цитата
можно сделать массив
ну и будет массив, который занимает 0 байт. Указатель на массив есть, но ведь мемберов у элементов то по прежнему нет Улыбаюсь Рушить нечего. Компилятор не даст ошибку совершить


Цитата
Если можно ОБЪЯВИТЬ пустой класс, то можно ОПРЕДЕЛИТЬ и объект-представитель пустого класса. Эти объекты размещаются в памяти. Их размещение предполагает выделение объекту участка памяти с уникальным адресом, а это означает, что объекты пустого класса имеют ненулевой размер.
вот только что разве эта формальность... Которую, в принципе, всё тот же компилятор мог бы обойти без проблем, не выделяя место. Ведь там всё равно ничего не храниться

В общем, пока что я не понимаю, зачем так сделано
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #151 : 25-08-2009 05:35 » 

почему то как-то всё неубедительно Улыбаюсь
Цитата
по указателю можно узнать тип
- в рантайме ли? Всё равно же на этапе компиляции
RTTI работает Улыбаюсь И уже давно используется в особо запущенных случаях диспетчеризации.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #152 : 25-08-2009 05:40 » 

рассказывай, что за зверь и как применять ? Улыбаюсь
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #153 : 25-08-2009 06:09 » 

http://www.cplusplus.com/doc/tutorial/typecasting/

когда ты используешь конструкции на вроде dynamic_cast, то в run-time происходит проверка типа объекта
например, мне пару раз приходилось кастовать указатель родителя в несколько разных типов наследников и смотреть получилось выполнить каст или нет, в зависимости от результата выполнялись разные обработчики для разных типов. или можно было просто сравнить typeid

например:
http://www.cplusplus.com/reference/std/typeinfo/type_info/
Записан

Странно всё это....
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #154 : 25-08-2009 06:14 » 

dynamic_cast использовать пока не приходилось.  А ссылки не желают открываться...
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #155 : 25-08-2009 06:17 » 

странно, у меня открываются
а сам сайт www.cplusplus.com?
Записан

Странно всё это....
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #156 : 25-08-2009 06:24 » 

сайт тоже
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #157 : 25-08-2009 06:53 » 

что-то у тебя с инетом

вот чудесный блог
http://alenacpp.blogspot.com/2005/08/c.html

и вот еще
http://ru.wikipedia.org/wiki/RTTI
https://forum.shelek.ru/index.php/topic,1619.0.html

ну и погугли.
Записан

Странно всё это....
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #158 : 25-08-2009 07:12 » 

дома гляну Улыбаюсь
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #159 : 25-08-2009 09:28 » 

Может это банальное выравнивание памяти под 4 байта? Тогда pragma pack нужен, если это имеет какое-то значение. Ты массив A попробуй посмотреть.
« Последнее редактирование: 25-08-2009 09:31 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #160 : 25-08-2009 09:42 » 

нет, выравнивание ни при чём, я и 1 и 0 даже пробовал )

С массивом A a1[N] штука такая : - в дампе идёт выравнивание по 4 байта (заполнено 0xcc) , а sizeof(a1) даёт N ))
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #161 : 22-11-2009 20:04 » 

нашёл ошибку в MFC-шном CRect (давно замечал проявление, но особо внимания не обращал, корректировал через +1 пару раз и забывал):

методы Width() и Height() возвращают значение на 1 меньше, чем нужно
« Последнее редактирование: 22-11-2009 20:20 от Алексей1153++ » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #162 : 22-11-2009 21:03 » 

Т.е.
width = (right - left)
так?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #163 : 22-11-2009 21:04 » 

CDC::FillSolidRect и CDC::Ellipse (и, наверное, другие функции тоже) выводят в прямоугольник на единицу меньше по высоте и ширине тоже...

Собственно, апишные функции тоже. Придётся просто смириться и учитывать ))

Цитата
Т.е.
width = (right - left)
так?

ага. В исходниках именно так.

Код:
ATLTYPES_INLINE int CRect::Width() const throw()
{ return right - left; }
ATLTYPES_INLINE int CRect::Height() const throw()
{ return bottom - top; }

 А должно быть right-left+1
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #164 : 22-11-2009 21:30 » 

пипец, как вспомню, сколько времени и нервов из-за этой хрени было в своё время потрачено ( Вылавливание пикселов как блох

Теперь хоть вооружён ))
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #165 : 22-11-2009 21:35 » 

А лечить чем будешь? Правкой заголовков?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #166 : 23-11-2009 04:36 » 

Цитата
Правкой заголовков?
Боже упаси, так низя делать Улыбаюсь Даже если это свои заголовки, которые где то уже применялись.
Буду учитывать на месте, не так уж часто используется. Обычно, когда делаю графику, контролирую под линзой в паинте, чтоб все размеры были такими, как задаю - собственно, так и обнаружил. Плюс-минус 1, да запомню парочку ситуаций

Думаю, мелкомягкие уже давно этот косяк заметили, но не подправили всё по той же причине - чтобы ни у кого ничего не упало. Разумно. А вот то, что изначально так сделали - за это руки надо оторвать )))
« Последнее редактирование: 23-11-2009 04:39 от Алексей1153++ » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #167 : 23-11-2009 07:50 » 

Ох, Лёха, Лёха, на сердце суматоха... Ага Всё за привидениями охотишься?

Если мир не устроен так как тебе хочется, это ещё не значит что мир полон багов. Ага

Цитата: MSDN
CRect::Width

    Calculates the width of CRect by subtracting the left value from the right value.

Remarks

    The width can be negative.


Иногда полезно заглядывать в справочник даже по таким пустяковым ф-ям. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #168 : 23-11-2009 08:08 » 

Кстати в С# тоже самое. Вот пример работы кода:

Код:
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics gr = e.Graphics;
            Rectangle rc = new Rectangle(0, 0, 20, 20);
            int w = rc.Width; // w = 20
            DrawRect(gr, 0, 0, rc.Width, rc.Height);
        }

DrawRect - просто рисует прямоугольник разноцветными линиями. Я сделал скрин с результата и увеличил его в Photoshop:



* ss1.gif (22.76 Кб - загружено 1357 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #169 : 23-11-2009 08:35 » 

Calculates the width of CRect by subtracting the left value from the right value.
 - само предложение - чушь )

опять скажешь "не будет оспаривать терминологию" ? Улыбаюсь Я под шириной пиксельного прямоугольника понимаю количество пикселов. Если L==0 и R==1 , то ширина == 2. А с отрицательными ширинами я не работаю, я их просто не отображаю.

Ладно, спорить особо не о чем, просто запомним и учтём Улыбаюсь
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #170 : 23-11-2009 09:52 » 

Лёш, ключевая фраза - "Я под шириной пиксельного прямоугольника понимаю ...". Но это неправильный подход.

Смотри, перед тобой некий механизм, например панель управления шаттлом. У тебя есть к нему мануал. Ты видишь кнопку "Сброс". И что? Полагаешься на "своё" понимание функциональности этой кнопки? Ага

Могу сказать только одно, у разработчиков наверняка были свои причины сделать именно так и не иначе. Это они задокументировали в мануале - те сообщили тебе об этом своём решении. Я лично неоднократно сталкивался с подобными ситуациями, когда на первый взгляд логика функции совершенно корявая, но при детальном разборе оказывется, что не всё так просто и самое идеальное решение - пойти по пути наименьшего сопротивления.
Обрати внимание, у CRect ширина может быть отрицательной, что тоже задокументировано. И если уж ты сделал выбор использовать CRect, то надо ознакомиться с его свойствами и причудами, в крайнем случае отказаться от его использования. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #171 : 23-11-2009 09:59 » 

ну так я и буду пользоваться с учётом )
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #172 : 23-11-2009 10:41 » 

Ну и правильно, так все делают. Но ругаться-то зачем?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #173 : 23-11-2009 10:45 » 

а шоб не расслаблялись )))
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #174 : 23-11-2009 12:26 » 

Джон, вот ткни , где в документации описано следующее.

имеется контрол CMonthCalCtrl m_MCC . Когда тыкают курсором в новую дату, достаём эту дату:

Код:
COleDateTime t;
m_MCC.GetCurSel(t);
//t.m_dt==3.1478710920272e-306
//t.m_status==t.invalid

при этом наше сегодняшнее время в этом формате примерно равно 40140.(...)

вот так решил проблему:
Код:
COleDateTime t;

SYSTEMTIME sys;
::memset(&sys,0,sizeof(sys));
m_MCC.GetCurSel(&sys);

//и косяк тут же виден :
//sys.wHour=19312;
//sys.wMinute=237;
//sys.wSecond=61092;
//sys.wMilliseconds=18; //ну, тут спорно ))
//sys.<всё остальное в порядке>;

sys.wHour=0;
sys.wMinute=0;
sys.wSecond=0;
sys.wMilliseconds=0;
t=sys;
« Последнее редактирование: 23-11-2009 12:28 от Алексей1153++ » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #175 : 23-11-2009 14:22 » 

Лёш, ну даже и не знаю куда тыкать?  А черт его знает...


* ss1.gif (7.78 Кб - загружено 1219 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #176 : 23-11-2009 15:19 » 

непосредственно в докУмент, где сиё безарбузие описано Улыбаюсь
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #177 : 24-11-2009 07:12 » 

Лёш, какое безобразие? О чём ты? Всё работает. Я ж тебе скрин поэтому привёл. С твоим кодом. В тултипе содержимое пременной t с полями m_dt и m_status. Или тебе проект выложить?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #178 : 24-11-2009 07:22 » 

Джон, а, я не видел скрин из вапа, сорри.

Ещё забыл сказать, что я про VC6 говорил , в последующих могли исправить - я не попробовал
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #179 : 25-08-2010 06:23 » 

допустим, имеем чисто консольное приложение. Но хочется попользоваться АПИшными функциями.

Для этого надо подключить
Код:
// Файлы заголовков Windows:
#include <windows.h>

но после этого происходит страшная ругань, которая лечится так:
Код:
// Исключите редко используемые компоненты из заголовков Windows
#define WIN32_LEAN_AND_MEAN

// Файлы заголовков Windows:
#include <windows.h>

(подсмотрено в другом шаблоне проекта студии - проект для windows)
Записан

Страниц: 1 ... 3 4 5 [6] 7 8   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines