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

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

Войти
Регистрация
Восстановить пароль
 
 
horr0rjkee
0 / 0 / 0
Регистрация: 22.08.2014
Сообщений: 16
#1

Что означают эти конструкции? - C++

23.08.2014, 00:04. Просмотров 1167. Ответов 16
Метки нет (Все метки)

Вот начал изучать cpp , до этого изучал несколько языков, таких как pawn,php и т.д.
Вопросы:
1) Что означают такие конструкции как
C
1
(тип данных)переменная
. Типо:
C
1
2
int test = 1;
cout << (DWORD)test << endl;
2) Что означают такие конструкции типо:
C
1
переменная->класс()
Ответьте новичку пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2014, 00:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что означают эти конструкции? (C++):

Что означают эти 2 определения? - C++
Компилируемый язык со статической типизацией. Сочетание высокоуровневых и низкоуровневых средств.

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

Объясните,что означают эти строки. - C++
Списал код из учебника(о представлен ниже).Все работает,нареканий нет.После был анализ этого кода с разжевыванием происходящего,но...

Что означают эти значения красным цветом? - C++
Что означают эти значения?

Помогите обьяснить что означают эти команды - C++
Вот задача Дана целочисленная матрица размера M × N. Найти номер последней из ее строк, содержащих максимальное количество одинаковых...

что означают эти 0x378 или 888 в языке C++? - C++
Привет. Объясните пожалуйста, что означают эти 0x378 или 888 в языке C++? Где можно взглянуть на таблицу этих адресов? Как их...

16
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.08.2014, 00:10 #2
1) приведение к типу
2) вызов метода
1
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,688
23.08.2014, 00:11 #3
1) С++ типизированный язык в отличии от PHP. И тут переменная $test не может хранить всё. Поэтому прочитайте про явное преобразованние данных, в данном случаи мы указываем, чтобы cout прочитал адресс test как переменную типа DWORD.
2) в php такое же есть. класс->метод()
Если работаем с объектом напрямую то Circle.draw(), если по указателю (указатель 4 байта на класс) то так : Circle->draw()
1
-NEURON-
Заблокирован
23.08.2014, 07:22 #4
Цитата Сообщение от horr0rjkee Посмотреть сообщение
1
(тип данных)переменная
Вся беда высоко и очень выокоуровневых языков в том, что они не дают понять, как устроенны ЭВМ и отупляют народ. Assembler & C++ forever
По делу, вот представь ситуацию в таком ракурсе, вот какой - то блок памяти твоего процесса:
0x34 0x11 0x55 0x66
вот смотри, это последовательность 4-х байтов, начиная с 0х34.
Переменная DWORD из WinApi - это DOUBLE WORD, то есть двойное слово - 4 байта размером (простое слово - два байта).
Теперь смотри ещё раз на свои байты 0x34 0x11 0x55 0x66. Если например ты приведёшь эту переменную к двух байтовой, то есть к обычному слову WORD, то эта переменная возьмёт первые два байты и из них формирует своё число, то есть будет просто WORD 0x34 0x11, приведёшь к BYTE (unsigned char) - будет один байт, то есть 0x34, понимаешь?

Но на самом деле это ерунда, т.к. это в основном вызывает интерес, когда передаёшь в какую - то функцию простой указатель ни на что, то есть на пустоту так сказать - void* , то есть для внутренних операндов функции это всего лишь указатель на блок памяти с какого - то стартового адреса не известной длинны, а вот если ты знаешь, что там должно быть, ты приводишь этот указатель к чему угодно, например к тип класса
Ладно, сложно это объяснит тому, кто не зная основ ЭВМ прыгнул на PHP
1
Voivoid
23.08.2014, 10:46
  #5

Не по теме:

Цитата Сообщение от -NEURON- Посмотреть сообщение
0x34 0x11 0x55 0x66
Лол, C'шники в своем репертуаре, человек про приведение типов спрашивает, а в ответ ему говорят про байтики и void*. И с такой-то гордостью, ух. Классика жанра

0
Справлюсь
23 / 23 / 5
Регистрация: 24.07.2014
Сообщений: 203
23.08.2014, 11:12 #6
Цитата Сообщение от -NEURON- Посмотреть сообщение
Вся беда высоко и очень выокоуровневых языков в том, что они не дают понять, как устроенны ЭВМ и отупляют народ.
согласен!!!
правда дальше не понял, Ассемблер вроде же низкоуровневый яз.
0
John Prick
23.08.2014, 11:56
  #7

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Поэтому прочитайте про явное преобразованние данных, в данном случаи мы указываем, чтобы cout прочитал адресс test как переменную типа DWORD.
Чего??.. Там просто приведение к DWORD. Никаких адресов и в помине нет.

0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.08.2014, 12:05 #8
Цитата Сообщение от horr0rjkee Посмотреть сообщение
1) Что означают такие конструкции как
Код C
1
(тип данных)переменная
Декларация переменной указанного типа.

Добавлено через 51 секунду
Цитата Сообщение от horr0rjkee Посмотреть сообщение
int test = 1;
Декларация переменной типа int, которую зовут test, а инициируется она она значением 1.

Добавлено через 28 секунд
Цитата Сообщение от horr0rjkee Посмотреть сообщение
Что означают такие конструкции типо:
Код C
1
переменная->класс()
Нет такой конструкции.
0
Казерская Ирина
95 / 31 / 6
Регистрация: 22.08.2014
Сообщений: 102
23.08.2014, 12:14 #9
1. Так переменная одного типа переделывается в переменную. другого типа.
В С++ каждая переменная относится к какому-то из нескольких типов данных, его указывают при объявлении переменной и сам собой он не изменяется. Но если у вас функция выдает (возвращает) переменную логического типа (true или false), а вам надо целое число, пишете перед вызовом функции (int)
2. Если переменная->класс(), то эта переменная не сама по себе, а член класса, а то, что вы приняли за класс() - не класс, а метод класса. Соответственно, такая конструкция означает, что этот метод класса обработает эту переменную.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.08.2014, 12:15 #10
Цитата Сообщение от -NEURON- Посмотреть сообщение
Вся беда высоко и очень выокоуровневых языков в том, что они не дают понять, как устроенны ЭВМ и отупляют народ. Assembler & C++ forever
По делу, вот представь ситуацию в таком ракурсе, вот какой - то блок памяти твоего процесса:
0x34 0x11 0x55 0x66
вот смотри, это последовательность 4-х байтов, начиная с 0х34.
Переменная DWORD из WinApi - это DOUBLE WORD, то есть двойное слово - 4 байта размером (простое слово - два байта).
Теперь смотри ещё раз на свои байты 0x34 0x11 0x55 0x66. Если например ты приведёшь эту переменную к двух байтовой, то есть к обычному слову WORD, то эта переменная возьмёт первые два байты и из них формирует своё число, то есть будет просто WORD 0x34 0x11, приведёшь к BYTE (unsigned char) - будет один байт, то есть 0x34, понимаешь?
Но на самом деле это ерунда, т.к. это в основном вызывает интерес, когда передаёшь в какую - то функцию простой указатель ни на что, то есть на пустоту так сказать - void* , то есть для внутренних операндов функции это всего лишь указатель на блок памяти с какого - то стартового адреса не известной длинны, а вот если ты знаешь, что там должно быть, ты приводишь этот указатель к чему угодно, например к тип класса
1. Где у него хоть слово про указатели?
2. В общем случае может присвоиться любое слово, не только стартовое, но и завершающее, из середины, или вообще составленное из не соседних байтов. И байт может присвоиться любой.
3. Именно твой опус про асм и затмевает суть.
0
rikimaru2013
23.08.2014, 15:18
  #11

Не по теме:

Цитата Сообщение от John Prick Посмотреть сообщение
Чего??.. Там просто приведение к DWORD. Никаких адресов и в помине нет.
Мне казалось, что преобразованние это то как будут интерпретироваться определённое количество бит, тоесть:
C++
1
char x = (char)test
Идёт по адрессу test, берём значение переменной int test 0100 00011 0101 0101 и так как просят явнопреобразовывать в char, записываем в x только 8 младших битов 0101 0101. На остальные вообще не смотрим.

0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.08.2014, 15:38 #12
Цитата Сообщение от John Prick Посмотреть сообщение
Чего??.. Там просто приведение к DWORD. Никаких адресов и в помине нет.
Ну ни нафиг было так шифровать? Даже я, зная и асм, и плюсы, не понял, чего ты хотел сказать.

Добавлено через 9 минут
horr0rjkee, значения, параметры, операнды и переменные бывают разных типов, но иногда надо использовать значение/переменную одного типа для присваивания его переменной другого типа, передать значение/переменную одного типа в функцию в качестве параметра другого типа, или использовать значение/переменную одного типа в качестве операнда другого типа. В этом случае надо привести значение/переменную к требуемому типу. Для этого и используются операторы приведения, такой оператор выглядит, как заключённый в скобки целевой тип. То есть
C++
1
(int) z
значит привести z к типу int,
C++
1
(char *)t
- привести t к типу char*, то есть к указателю на char. Дебри про слова и байты сюда здесь ни к чему, приведение может происходить без фактического преобразования, например,
C++
1
2
3
int *p;
unsigned int *d;
d=(unsigned int*)p;
при приведении не происходит ни усекновение разрядности, ни дополнение её, ни изменение каких либо байтов, ни изменение их порядка. Но указатель p используется как указатель на беззнаковое целое. А как именно выполняется приведение в каждом конкретном случае определяется реализациями обоих типов.
0
Alex5
1056 / 720 / 108
Регистрация: 12.04.2010
Сообщений: 1,847
23.08.2014, 18:09 #13
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
C++
1
char x = (char)test
записываем в x только 8 младших битов 0101 0101
rikimaru2013, именно так и будет. Причём то же самое будет, если
C++
1
2
int n = 1;
char x = test; // т.к. sizeof(char)==1, значит 4 байта никак не запишем
Добавлено через 5 минут
Пример приведения типов.
C++
1
2
3
char c = 'N';
std::cout << c << endl; /* будет напечатано    N */ 
std:: cout << (int)c << endl;  /* будет напечатано    78 */
Добавлено через 2 минуты
C++
1
2
3
int n = -1;
std::cout << n << endl; /* -1 */ 
std:: cout << (unsigned int)n << endl;  /*   4294967295 */
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
23.08.2014, 18:11 #14
-NEURON-, представьте, что вы попросили объяснить как заправить машину, а вам стали про устройство двигателя рассказывать.

Не на том уровне абстракции объясняете.
1
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
23.08.2014, 23:13 #15
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Мне казалось, что преобразованние это то как будут интерпретироваться определённое количество бит, тоесть:
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Идёт по адрессу test, берём значение переменной int test 0100 00011 0101 0101 и так как просят явнопреобразовывать в char, записываем в x только 8 младших битов 0101 0101. На остальные вообще не смотрим.
А как тогда будет работать, например такое:
C++
1
2
double pi = 3.142;
int nearly_pi = (int)pi;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2014, 23:13
Привет! Вот еще темы с ответами:

Что означают != - C++
Помогите разобраться, что означает знак !=

Что означают -> в c++ ? - C++
c++ не использую, но интересует что в c++ означает конструкция -&gt; , к примеру Chart1-&gt;Series-&gt;CheckDataSource(); в других языках в этих...

что означают операторы +, -, *, ++, --, +=, -=, *=, = - C++
Здравствуйте! что означают операторы +, -, *, ++, --, +=, -=, *=, = ???? Спасибо!

Что означают данные - C++
Здравствуйте. подскажите что могут означать данные следующего характера? DWORD poffsets::dw_m_lifestats() {...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
23.08.2014, 23:13
Ответ Создать тему
Опции темы

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