Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как правильно понять и где прочитать?


Автор: OutlawZ 16.8.2012, 20:45
Часто в книгах да и примерах кода видел такую запись:

Код

HBITMAP b;
TObject o;


как написано это мол b имеет тип HBITMAP а o тип TObject. Где можно прочитать про это? так как не понимаю зачем писать HBITMAP если можно просто написать b. 

Вопрос в том где можно прочитать про эти типы и как с ними работать? Заранее спасибо.

Автор: Albor 17.8.2012, 08:08
Цитата(OutlawZ @  16.8.2012,  19:45 Найти цитируемый пост)
как написано это мол b имеет тип HBITMAP а o тип TObject. Где можно прочитать про это? так как не понимаю зачем писать HBITMAP если можно просто написать b. 

Ну, это как бы азы - объявление переменных.

Цитата(OutlawZ @  16.8.2012,  19:45 Найти цитируемый пост)
Вопрос в том где можно прочитать про эти типы и как с ними работать?

Программирование под Windows. HBITMAP это описатель картинки... Ответить очень трудно, так как первая часть вопроса просто валит с ног:
Цитата(OutlawZ @  16.8.2012,  19:45 Найти цитируемый пост)

так как не понимаю зачем писать HBITMAP если можно просто написать b


Автор: LeonidPr 17.8.2012, 09:08
Цитата(OutlawZ @  16.8.2012,  20:45 Найти цитируемый пост)
Вопрос в том где можно прочитать про эти типы и как с ними работать?

Я так понимаю что вы программите в C++ Builder?
Про HBITMAP почитайте в Win32 Programmer's reference, раздел Bitmaps.
Про TObject почитайте в Borland C++ Builder help раздел Visual Component Library Reference -> About Object and Component Help -> Alphabetical Object and Component listing -> TO -> TObject
Это в пятом билдере. в вашей версии разделы возможно отличаются, но думаю найдете что где.

Цитата(OutlawZ @  16.8.2012,  20:45 Найти цитируемый пост)
зачем писать HBITMAP если можно просто написать b

А затем, что C/C++ не являются языками с динамической типизацией и тип переменной нужно указывать при её объявлении.

Автор: NoviceF 17.8.2012, 09:20
Цитата(OutlawZ @ 16.8.2012,  20:45)
так как не понимаю зачем писать HBITMAP если можно просто написать b.

Попробуйте объявить любую переменную, не указав её тип - компилятор не даст, тут то же самое.

Автор: wester 18.8.2012, 00:23
Цитата

зачем писать HBITMAP если можно просто написать b. 

Встречный вопрос - как компилятор поймет с каким типом надо работать, если его(тип) не объявить ?

Автор: catherham 18.8.2012, 16:42
Цитата

Встречный вопрос - как компилятор поймет с каким типом надо работать, если его(тип) не объявить ? 


Из контекста использования. 

Код

a;
a = "строка";


Значит тип переменной строка. 
Даже С++ поддерживает похожее объявление переменной (в новом стандарте C++11).

Код

auto Variable = 10;

Здесь тип переменной int

Автор: 500mhz 18.8.2012, 18:18
DWORD рулит )))

Автор: wester 20.8.2012, 09:56
catherham
Цитата

Код

a;
a = "строка";


Но в первой строке, будет неизвестно с каким типом работать. 

Цитата

Код

auto Variable = 10;


Да, это так. 
Но вопрос изначально поднимался о том, как компилятор узнает о типе на этапе объявления. 

Хотя может стоить юзать void* и не будет таких вопросов ? smile

Автор: catherham 20.8.2012, 13:06
Цитата

Да, это так. 
Но вопрос изначально поднимался о том, как компилятор узнает о типе на этапе объявления. 

Хотя может стоить юзать void* и не будет таких вопросов ?  


На этапе объявления у нас просто текст  smile 

Компилятор определит тип на этапе компиляции и подставит необходимый код.

auto Variable = 10; и int Variable = 10; В итоге даст одинаковый машинный код. Это синтаксический сахар, чтобы не писать:

длиииииииииииииииииииииииииииииииииииноеИмяТипа переменная = функция(1);

А писать 

auto переменная  = функция(1);

Я кэп smile 

Автор: wester 20.8.2012, 15:29
Цитата

Компилятор определит тип на этапе компиляции и подставит необходимый код.

Да вот не определит он тип, если у него не будет каких либо данных о нем. Не сможет, да и не должен. 

Цитата

auto Variable = 10; и int Variable = 10; В итоге даст одинаковый машинный код.

соглашусь, но попробуйте написать 
auto Variable;
Variable = 10;  
думаю, ошибка будет в первой строке smile

Цитата

Это синтаксический сахар, чтобы не писать:
длиииииииииииииииииииииииииииииииииииноеИмяТипа переменная = функция(1);

Годами юзали #define и еще столько же будем юзать. Таки где выгода слова auto в данном случае ?

Автор: catherham 20.8.2012, 15:57
Цитата

Да вот не определит он тип, если у него не будет каких либо данных о нем. Не сможет, да и не должен. 


Согласен, должен быть контекст

Цитата

соглашусь, но попробуйте написать 
auto Variable;
Variable = 10;  
думаю, ошибка будет в первой строке 


Все верно, но в PHP такое будет работать, в c++ конечно нет

Цитата

Годами юзали #define и еще столько же будем юзать. Таки где выгода слова auto в данном случае ? 


Годами использовали телеги, зачем нам машины? Так быстрее smile 

Если у вас в файле используется 10 таких типов? 
Можно писать и макросы, но с auto удобнее. Во всех современных языках такая фича есть. Теперь и в с++  smile 

Автор: wester 20.8.2012, 16:32
catherham
Цитата

Согласен, должен быть контекст

хоть в чем - то пришли к компромиссу smile
Цитата

Если у вас в файле используется 10 таких типов? 

10 типов с очень длинными названиями ? Ну что могу сказать... повезло. Обычно их много больше.
Цитата

Годами использовали телеги, зачем нам машины? Так быстрее smile 

Таки некорректно. Телеги это прошлое, и от них отказались именно из - за того, что они не удовлетворяют нынешним запросам. 
С auto же непонятно. Я могу написать auto d = 1.0  Но. это будет long или double ? 

Автор: catherham 20.8.2012, 17:07
Цитата

Таки некорректно. Телеги это прошлое, и от них отказались именно из - за того, что они не удовлетворяют нынешним запросам. 
С auto же непонятно. Я могу написать auto d = 1.0  Но. это будет long или double ? 


Вы наверно имели ввиду float. long это вроде целое. Не знаю, я на с++ мало что писал, но в c#, например, это будет double.
Пошукал, нашел ответ на ваш вопрос
Цитата

Литералы, представляющие действительные числа, могут быть записаны как с десятичной точкой, так и в научной (экспоненциальной) нотации. По умолчанию они имеют тип double. Для явного указания типа float нужно использовать суффикс F или f, а для long double - L или l, но только в случае записи с десятичной точкой. 

Так что в с++ это тоже double. 

Автор: wester 20.8.2012, 21:21
Цитата

Вы наверно имели ввиду float. long это вроде целое. Не знаю, я на с++ мало что писал, но в c#, например, это будет double.

да, опечатался 

Да, про подобную запись с литералами знаю, но тогда зачем нужно auto если придеться писать auto foo = 1.2F ?
float foo = 1.2;
auto foo = 1.2f;
Одинаковое количество напечатанных символов для определения переменной. А где сахар, который синтаксический ?

Автор: borisbn 21.8.2012, 08:17
> А где сахар, который синтаксический ?
Код

std::vector< std::map< unsigned long long, std::string > >::const_iterator it = find( ... )
vs
auto it = find( ... )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)