Добро пожаловать! Игровой форум WLUX.NET - Игры, Читы, Скрипты, Статьи, Софт, Курсы.

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

Добро пожаловать гость!

Приветствуем вас на нашем форуме! Мы очень рады вас видеть и с большим удовольствием поделимся всей информацией нашего форума!

Мы уважаем своих пользователей и так же ждем от вас приятного общения.

Система наград, ежедневное пополнения тем!

Общайся, получай награды.

Статьи, гайды, софт

У нас вы можете скачать бесплатно читы для игр. Полезные гайды на любые темы и схемы заработка. Есть раздел халявы!

FAQ по форуму

Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

  • Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываються в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки работают только с Администрацией форума

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

C++ Гайд Алфавит и основные понятия языка C++

Статус
Закрыто для дальнейших ответов.
wlux.net Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
23 845
218
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #1
Алфавит и основные понятия языка C++.png

Среди современных языков программирования язык является одним из наиболее распространенных. Язык универсален, однако наиболее эффективно его применение в задачах системного программирования – разработке трансляторов, операционных систем, инструментальных средств. Язык хорошо зарекомендовал себя эффективностью, лаконичностью записи алгоритмов, логической стройностью программ. Во многих случаях программы, написанные на языке , сравнимы по скорости с программами, написанными на Ассемблере, при этом они более наглядны и просты в сопровождении.

Язык имеет ряд существенных особенностей, которые выделяют его среди других языков программирования. В значительной степени на формирование идеологии языка повлияла цель, которую ставили перед собой его создатели – обеспечение системного программиста удобным инструментальным языком, который мог бы заменить Ассемблер. В результате появился язык программирования высокого уровня, обеспечивающий необычайно легкий доступ к аппаратным средствам компьютера. С одной стороны, как и другие современные языки высокого уровня, язык поддерживает полный набор конструкций структурного программирования, модульность, блочную структуру программы. С другой стороны, язык C имеет ряд низкоуровневых черт.
Перечислю некоторые особенности языка :
  • В языке реализован ряд операций низкого уровня. Некоторые из таких операций напрямую соответствуют машинным командам, например, поразрядные операции или операции ++ и --.
  • Базовые типы данных языка отражают те же объекты, с которыми приходится иметь дело в программе на Ассемблере – байты, машинные слова и т.д. Несмотря на наличие в языке развитых средств построения составных объектов (массивов и структур), в нем практически отсутствуют средства для работы с ними как с единым целым.
  • Язык поддерживает механизм указателей на переменные и функции. Указатель – это переменная, предназначенная для хранения машинного адреса некоторой переменной или функции. Поддерживается арифметика указателей, что позволяет осуществлять непосредственный доступ и работу с адресами памяти практически так же легко, как на Ассемблере. Использование указателей позволяет создавать высокоэффективные программы, однако требует от программиста особой осторожности.
  • Как никакой другой язык программирования высокого уровня, язык «доверяет» программисту. Даже в таком существенном вопросе, как преобразование типов данных, налагаются лишь незначительные ограничения. Однако это также требует от программиста осторожности и самоконтроля.
  • Несмотря на эффективность и мощность конструкция языка , он относительно мал по объему. В нем отсутствуют встроенные операторы ввода/вывода, динамического распределения памяти, управления процессами и т.п., однако в системное окружение языка входит библиотека стандартных функций, в которой реализованы подобные действия.
Ключевое понятие в языке C++ – класс. Классы обеспечивают сокрытие информации, гарантированную инициализацию данных, неявное преобразование определяемых пользователем типов, динамическое определение типа, контроль пользователя над управлением памятью и механизм перегрузки операторов. Язык C++ предоставляет гораздо лучшие, чем язык С, средства для проверки типов и поддержки модульного программирования. Кроме того, язык содержит усовершенствования, непосредственно не связанные с классами, такие как: символические константы, встраивание функций в место вызова, параметры функций по умолчанию, перегруженные имена функций, операторы управления свободной памятью и ссылки. Язык C++ сохраняет способность языка С эффективно работать с аппаратной частью на уровне битов, байтов, слов, адресов и т.д. Это позволяет реализовывать пользовательские типы с достаточной степенью эффективности.

Алфавит (или множество литералов*) языка программирования C++ основывается на множестве символов таблицы кодов ASCII. Алфавит C++ включает:
  • Прописные буквы латинского алфавита;
  • Строчные буквы латинского алфавита;
  • Арабские цифры;
  • Разделители: , . ; : ? ! ' " | / \ ~ _ ^ ( ) { } [ ] < > # % & - = + *
Остальные символы могут быть использованы только в символьных строках, символьных константах и комментариях. Язык C++ различает большие и маленькие буквы, таким образом, name и Name – разные идентификаторы.
Алфавит C++ служит для построения слов, которые в C++ называются лексемами. Различают пять типов лексем:
  • Идентифекаторы
  • Ключевые слова
  • Знаки (символы) операции
  • Литералы
  • Разделители
*Литералы в языке C++ могут быть целые, вещественные, символьные и строковые.

  • [*]Целые:
    [*]

    десятичные: 10, 132, -32179;
    [*]

    восьмеричные (предваряются символом «0»): 010, 0204, -076663;
    [*]

    шестнадцатеричные (предваряются символами «0х»): 0хА, 0x84, 0x7db3.
    [*]Вещественные: 15.75, 1.575e1, .75, -.125
    [*]Символьные: 'a', 'e', '.', '?', '2'.
    [*]Строковые: "строка
Комментарий – это последовательность символов, которая игнорируется компилятором языка C++. Комментарий имеет следующий вид: /*<символы>*/. Комментарии могут занимать несколько строк, но не могут быть вложенными. Кроме того, часть строки, следующая за символами //, также рассматривается как комментарий.

Разумное использование комментариев (и согласованное употребление отступов) может сделать чтение и понимание программы более приятным занятием. При неправильном использовании комментариев читабельность программы может, напротив, серьезно пострадать. Компилятор не понимает смысл комментариев, поэтому не существует способа проверить, что комментарий:
  1. Cодержателен;
  2. имеет какое-то отношение к программе;
  3. не устарел.
Удачно подобранный и написанный набор комментариев является существенной частью хорошей программы. Написание «правильных» комментариев может оказаться не менее сложной задачей, чем написание самой программы.

Типы данных языка C++
ИмяРазмерПредставляемые значенияДиапазон
bool1 байтлогическиеfalse,true
(signed) char1 байтсимволы
целые числа
от –128 до 127
wchar_t2 байтасимволы Unicodeот 0 до 65535
(signed) short int2 байтацелые числаот -32768 до 32767
(signed) intзависит от реализации
(в последних компиляторах обычно 4 байта)
целые числа
(signed) long int4 байтацелые числаот -2147483648 до 2147483647
(signed) long long int
(signed) __int64 (MS)
8 байтцелые числаот –9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
unsigned char1 байтсимволы
целые числа
от 0 до 255
unsigned short int2 байтацелые числа0 до 65535
unsigned intзависит от реализации
(в последних компиляторах обычно 4 байта)
целые числа
unsigned long int4 байтацелые числаот 0 до 4294967295
(unsigned) long long int
(unsigned) __int64 (MS)
8 байтцелые числаот 0 до 18,446,744,073,709,551,615
float4 байтавещественные числаот 1.175494351e–38
до 3.402823466e+38
double8 байтвещественные числаот 2.2250738585072014e–308
до 1.7976931348623158e+308
long doubleзависит от реализациивещественные числа

В языке C++ также существуют перечислимый тип – enum, который является подмножеством целого типа, и пустой тип – void, который имеет специальное назначение. Он используется для объявления функций, которые не возвращают никакого значения, а также для объявления указателей на значение типа void. Такие указатели могут быть преобразованы к указателям на любой другой тип.

В языке С++ можно объявлять структуры и так называемые объединения.

В языке C++ нет специальных типов для массивов и строк, которые представляются массивом символов.

В языке Си не существовало логического типа. Логические значения представлялись данными целого типа, при этом значение 0 соответствовало логическому значению ложь, а все остальные целые значения соответствовали логическому значению истина. В языке С++ сохранена данная логика. По определению, true имеет значение 1 при преобразовании к целому типу, а false – значение 0. И наоборот, целые можно неявно преобразовать в логические значения: при этом ненулевые целые преобразуются в true, а ноль – в false. В любом месте, где требуется логическое значение, может стоять целочисленное выражение. В арифметических и логических выражениях логические значения преобразуются в целые, операции выполняются над преобразованными величинами.

Указатель можно неявно преобразовать в логическое значение, при этом ненулевой указатель принимает значение true, нулевой – false.

Такой подход позволяет вместо логической и целочисленной переменных объявлять только целочисленную, при этом значение переменной, равное 0, говорит об отсутствии некоторого признака у объекта, а остальные значения говорят о его наличии, и при этом несут какую-либо дополнительную информацию.

При выполнении бинарных операций производятся преобразования по умолчанию для приведения операндов к одному и тому же типу, который потом используется как тип результата:
- если один из операндов имеет тип long double, другой тоже преобразуется в long double;
иначе, если один операнд имеет тип double, то второй операнд преобразуется к типу double;
иначе, если один операнд имеет тип float, то второй операнд преобразуется к типу float;
иначе над обоими операндами производится интегральное продвижение, а именно: значения типов char, signed char, unsigned char, short int и unsigned short int преобразуются в int, если int может представить все значения исходных типов, в противном случае они преобразуются в unsigned int; bool преобразуется в int.
- затем если один операнд имеет тип unsigned long, то второй операнд преобразуется к типу unsigned long;
иначе, если один из операндов относится к типу long int, а другой к типу unsigned int, то если long int может представить все значений типа unsigned int, unsigned int преобразуется в long int, иначе оба операнда преобразуются в unsigned long int;
иначе, если один операнд имеет тип long int, то второй операнд преобразуется к типу long int;
иначе, если один операнд имеет тип unsigned int, то второй операнд преобразуется к типу unsigned int;
иначе оба операнда имеют тип int.


В языке С++ нет операций преобразования между символом и кодом символа, т.к. в оперативной памяти символ и так храниться в виде его кода. Поэтому можно к переменной, хранящей символ, прибавить 1 и получить следующий символ.

Операции языка C++
Знак операцииНаименованиеАссоциативность
::Разрешение области видимостиСлева направо
( ) [ ] . ->
++ --
static_cast
dynamic_cast
reinterpret_cast
const_cast
Первичные
Постфиксный инкремент и декремент
Преобразование с проверкой во время компиляции
Преобразование с проверкой во время выполенения
Преобразование без проверки
Константное преобразование
Слева направо
- ~ ! * &
++ --
sizeof
(<тип>)<выражение>
new
delete
Унарные
Префиксный инкремент и декремент
Вычисление размера
Приведение типа
Выделение памяти
Освобождение памяти
Справа налево
.* ->*Выбор члена классаСлева направо
* / %МультипликативныеСлева направо
+ -АддитивныеСлева направо
<< >>СдвигСлева направо
< > <= >=ОтношениеСлева направо
== !=ОтношениеСлева направо
&Поразрядное ИСлева направо
^Поразрядное исключающее ИЛИСлева направо
|Поразрядное ИЛИСлева направо
&&Логическое ИСлева направо
||Логическое ИЛИСлева направо
? :Условная операцияСправа налево
= *= /= %= += -= <<= >>= &= ^= |=Простое и составное присваиванияСправа налево
throwГенерация исключенияСлева направо
,Операция последовательного вычисленияСлева направо

Порядок вычислений подвыражений внутри выражений не определён. В частности, не стоит предполагать, что выражения вычисляются слева направо.
PHP:
int x = f(2) + g(3); // Неизвестно, какая функция вызовется первой – f() или g()
При отсутствии ограничений на порядок вычислений можно сгенерировать более качественный код. Однако отсутствие ограничений на порядок вычислений может привести к неопределённым результатам.

Логические операции «И» и «ИЛИ», условная операция и операция последовательного вычисления гарантируют определенный порядок вычисления своих операндов. Условная операция вычисляет сначала свой первый операнд, а затем, в зависимости от его значения, либо второй, либо третий операнд. Логические операции также обеспечивают вычисление своих операндов слева направо, причём логические операции вычисляют минимальное число операндов, необходимое для определения результата выражения. Таким образом, второй операнд выражения может вообще не вычисляться. Операция последовательного вычисления обеспечивает вычисление своих операндов по очереди, слева направо. Обратите внимание, что запятая в качестве указателя последовательности логически отличается от запятой, используемой в качестве разделителя параметров при вызове функций.

PHP:
f1(v[i], i++); // Один параметр
f2((v[i], i++)); // Два параметра

Вызов функции f1 осуществляется с двумя параметрами v и i++, и порядок вычисления параметров не определён. Расчет на определённый порядок вычисления параметров является исключительно плохим стилем и приводит к непредсказуемому поведению программы. Вызов функции f2 имеет один параметр – последовательность выражений, разделённых запятой. Порядок вычисления гарантирован, и вызов эквивалентен f2(i++).
 
Статус
Закрыто для дальнейших ответов.

Поиск по форуму

shape1
shape2
shape3
shape4
shape7
shape8
Верх