C ++

Типи C ++

Типи C ++
Сутність C ++ - це значення, об'єкт, посилання, функція, перерахувач, тип, член класу, бітове поле, структуроване прив'язування, простір імен, шаблон, спеціалізація шаблону або пакет параметрів. Сутність може бути одного або декількох типів. Існує дві категорії типів C ++: основний та складений типи. Скаляр - це арифметика або тип об'єкта-вказівника. Основні типи - це скаляри, тоді як решта типів сутностей - складені типи.

Пам'ять комп'ютера - це ряд комірок. Кожна комірка має розмір одного байта, зазвичай це простір, який займає західноєвропейський персонаж. Розмір об’єкта задається в байтах. У цій статті наведено короткий опис типів C ++. Ви повинні вже мати базові знання C ++, щоб зрозуміти цю статтю.

Зміст статті

- Фундаментальні типи
- Шляхи побудови складних типів
- Масиви
- Перерахування
- Клас
- Союз
- Список літератури
- Функції
- Інші типи сполук
- Висновок

Фундаментальні типи

Фундаментальні типи - це скалярні типи.

bool

Логічний тип або тип bool має значення true або false для 1 або 0. Істина чи помилка займає один байт.

char, непідписаний char та підписаний char

Характер, як правило, для одного західноєвропейського персонажа. Зазвичай він займає один байт. Існує також беззнаковий та підписаний символ, який є восьмибітовим цілим числом. Непідписані символи не містять негативних значень, тоді як підписані символи мають негативні значення. Тип значення, яке має char, залежить від компілятора і може бути просто непідписаним char. Ці три типи символів називаються вузькими типами символів, і кожен займає один байт.

Ціле число

Існує п’ять стандартних цілочисельних типів без підпису та п’ять стандартних цілочисельних типів із підписом. П'ять цілих типів без знака: "unsigned char", "unsigned short int", "unsigned int", "unsigned long int" і "unsigned long long int". П'ять відповідних цілих типів зі знаком: "підписаний символ", "короткий int", "int", "long int" і "long long int".

“Беззнаковий символ” - це той самий тип, що і вузькі типи символів (див. Вище). "Підписаний символ" - це інший тип вузьких типів символів (див. Вище).

У компіляторі g ++ “unsigned char” або “signed char” займає один байт; “Unsigned short int” або “short int” займає два байти; “Unsigned int” або “int” займає чотири байти; “Unsigned long int” або “long int” займає 8 байт; “Unsigned long long int” або “long long int” все ще займає 8 байт (станом на сьогодні).

char16_t, char32_t, wchar_t

Маючи справу із західноєвропейськими персонажами, типу char достатньо у багатьох ситуаціях. Однак для спілкування з китайською та іншими східними мовами потрібні char16_t, або char32_t, або wchar_t. З компілятором g ++ char16_t займає два байти; char32_t займає чотири байти, а wchar_t також займає чотири байти.

Bool, char, char16_t, char32_t, wchar_t, підписаний і цілі цілі без знака утворюють інший набір, який називається інтегральними (цілими) типами.

На цьому етапі в статті було згадано два колективні типи: вузькі типи символів та цілісні типи.

Типи з плаваючою комою

Припустимо, що числа 457 000 та 457 230 - це однакові показники, виміряні двома різними вимірювальними приладами. 457 230 є більш точним, ніж 457 000, оскільки значення є більш детальним (включає менші місця: + 200 плюс 30). Число з плаваючою точкою - це число з дробовою (десятковою) частиною. Хоча числа в комп'ютері - це послідовність бітів, деякі числа з плаваючою комою є більш точними, ніж інші.

Деякі вимірювальні прилади проводять вимірювання з мінімальними кроками, скажімо, 10 одиниць. Такий прилад мав би такі показники: 10, 20, 30, 40, ... 100, 110, 130, 140, ... 200, 210, 220, 230, 240 тощо. Незважаючи на те, що числа в комп'ютері - це послідовність бітів, числа з плаваючою точкою діють у кілька мінімальних кроків (набагато менше 10 одиниць).

C ++ має три типи з плаваючою комою: плаваюча, подвійна та довга подвійна. Для будь-якого компілятора, double повинен мати точність, що вищу, ніж у float або, принаймні, у float; long double повинен мати точність, яка вища, ніж у double або принаймні у double.

Існує третя колективна назва: арифметичний тип. Це назва для цілісних типів і типів із плаваючою комою. Зауважте, що це також назва всіх скалярних типів, як пояснювалося до цього часу.

У компіляторі g ++ кількість байтів для поплавця - чотири; кількість байт для подвійного - вісім; кількість байт для довгого подвійного - шістнадцять.

порожній тип

У компіляторі g ++ розмір типу void становить один байт. Байт офіційно не має бітів, тобто його розташування має порожній вміст.

Шляхи побудови складних типів

Складені типи - це не фундаментальні типи. Це означає, що складові типи є нескалярними типами. Цей розділ пояснює основи складових типів.

Масиви

Наступний сегмент коду показує масив ints та масив символів:

int arrInt [] = 1, 2, 3, 4, 5;
char arrCha [] = 'a', 'b', 'c', 'd', 'e';
кут << arrInt[2] <<" <Вихід: 3 c.

Перерахування

Перерахування - це тип із названими константами. Розглянемо такий сегмент коду:

перелічити a = 3, b, c;
кут << b <<'\n';

Результат: 4. Перший рядок сегмента коду - це перерахування, а a, b або c - перечислювач.

Клас

Клас - це узагальнена одиниця, з якої можна створити (створити примірник) багато об’єктів тієї самої узагальненої одиниці. Наступна програма показує клас та два об'єкти, створені з нього. Такий об'єкт відрізняється від скалярного.

#включати
використання простору імен std;
клас TheCla

публічний:
int num = 5;
int fn ()

повернути номер;

;
int main ()

TheCla obj1;
TheCla obj2;
кут << obj1.num << " << obj2.num <<'\n';
повернути 0;

Вихід: 5 5. Ім'я класу - TheCla, а імена двох об'єктів - obj1 та obj2. Зверніть увагу на крапку з комою відразу після опису (визначення) класу. Зверніть увагу, як два об'єкти були створені у функції main ().

Примітка: num - це елемент даних, а fn - функція-член.

Союз

структура

Структура схожа на масив, але замість того, щоб мати пари індекс / значення, вона має пари ім'я / значення. Імена можуть бути написані в будь-якому порядку. Наступна програма показує структуру та її використання:

#включати
використання простору імен std;
структура TheCla

int num = 5;
float flt = 2.3;
char ch = 'a';
obj1, obj2;
int main ()

кут << obj2.num <<", "<< obj2.flt <<", "<< obj2.ch <<'\n';
повернути 0;

Результат:

5, 2.3, а

Назва структури - TheCla. obj1 та obj2 - це два різні об'єкти структури.

Союз

Наступна програма показує об'єднання та його використання:

#включати
використання простору імен std;
союз TheCla

int num;
float flt = 2.3;
char ch;
obj1, obj2;
int main ()

кут << obj2.flt <<'\n';
повернути 0;

Результат: 2.3. Союз подібний до структури. Основна відмінність структури від об'єднання полягає в тому, що для структури лише один член може мати значення (ініціалізоване) одночасно. У наведеній вище програмі член flt має значення 2.3. Кожен з інших членів, num або ch, може мати значення next, лише якщо значення для flt відмовлено.

Список літератури

Посилання - це синонім ідентифікатора. Наступний сегмент коду показує, як отримати посилання на ідентифікатор:

int id = 5;
int & ref1 = id;
int & ref2 = id;
кут << id << " << ref1 << " << ref2 <<'\n';

Вихід: 5 5 5. ref1 та ref2 - синоніми до id.

Довідник lvalue та Довідник rvalue

Наведені вище посилання є посиланнями на значення. Наступний код показує посилання на rvalue:

int && ref = 5;
кут << ref <<'\n';

Результат: 5. Це посилання створюється без ідентифікації місця в пам'яті. Для цього потрібно подвоїти &, тобто.e., &&.

Вказівник

Покажчик насправді не є суттю C ++. Однак це забезпечує кращу схему роботи з посиланнями. Наступний код показує, як можна створити вказівник:

int ptdId = 5;
int ptdId = 5;
int * ptrId;
ptrId = &ptdId;
кут << *ptrId <<'\n';

Результат: 5. Зверніть увагу на різницю в назві між ptdId та ptdId. ptdId - це загострений об'єкт, а ptrId - об'єкт-вказівник. & ptdId повертає адресу вказаного об'єкта, призначеного ptrId. Щоб повернути значення загостреного об'єкта, використовуйте * ptrId.

Функції

Основна функція та її виклик

У наступному коді показано основне визначення функції та її виклик:

#включати
використання простору імен std;
int fn (int num)

кут<<"seen"<<'\n';
повернути номер;

int main ()

int ret = fn (5);
кут << ret <<'\n';
повернути 0;

Вихідний результат

визначення функції

5

Виклик функції fn (5). Ім'я функції - fn.

Посилання та вказівник на функцію

& fn повертає адресу в пам'яті функції, ім'я якої є fn. Наступний оператор оголошує вказівник на функцію:

int (* func) ();

Тут func - це назва вказівника на функцію. Перша пара дужок відрізняє цей покажчик функції від покажчика скалярного об’єкта. func може бути зроблено для утримання адреси функції, ідентифікованої fn, наступним чином:

func = &fn;

Наступна програма вводить у дію посилання на функцію та вказівник:

#включати
використання простору імен std;
int fn (int num)

/ * деякі твердження * /
повернути номер;

int main ()

int (* func) (int);
func = &fn;
int ret = func (5);
кут << ret <<'\n';
повернути 0;

Результат: 5. Зверніть увагу, що і fn, і func мають в параметрі int параметр int.

Інші типи сполук

Вищезазначені основні типи сполук є складовими самі по собі. Вони також використовуються для побудови розроблених типів сполук.

typedef

Зарезервоване слово typedef використовується для заміни послідовності типів одним іменем (для послідовності). Наступний сегмент коду ілюструє це:

typedef unsigned long int IduIL;

IduIL myInt = 555555555555555555;
кут << myInt <<'\n';

Вихід - 555555555555555555. У коді IduIL став типом, що означає "unsigned long int".

Структуроване прив'язка

Структурне прив'язка - це функція, яка дає можливість іменам надавати підоб'єкти. Наступний код ілюструє це для масиву:

int arr [3] = 1, 2, 3;
авто [x, y, z] (обр.);
кут << x <<"<< y <<"<< z <<'\n';

Вихід - 1 2 3. Отже, значення: 1, 2, 3 отримали імена, x, y, z. Зверніть увагу на використання та позицію зарезервованого слова, авто. Також зверніть увагу на використання квадратних дужок.

Бітове поле

Пам'ять - це послідовність клітин. Кожна комірка бере байт. Крім того, кожен байт складається з восьми бітів. Групу бітів, не обов'язково вісім бітів, можна встановити та змінити. Така група називається бітовим полем. Ці групи лежали б поруч. Якщо групи не складають тип, скажімо 16 біт для короткого int, додаються біти для заповнення. Наступний код ілюструє це структурою:

struct Дата

непідписаний короткий wkDay: 3; // 3 біти
непідписаний короткий понеділок: 6; // 6 біт
непідписаний короткий пн: 5; // 5 біт
неподписаний короткий рік: 8; // 8 біт для 2-значного року
dte;
dte.wkDay = 1; dte.понеділок = 2; dte.пн = 2; dte.рік = 21;
кут << dte.mon <<'/'<< dte.monDay <<'/'<< dte.yr <<'\n';

Вихід: 2/2/21. Загальна кількість бітів для wkDay, MonDay та mon становить 3 + 6 + 5 = 14. Отже, два біти заповнення будуть додані, щоб скласти 16 бітів для короткого цілого числа 2 байти (16 бітів). Наступні 8 бітів починають наступний короткий int, який потім заповнюється 8 бітами доповнення.

Примітка: Уникайте використання бітових полів; використовувати його лише для досліджень.

Простір імен

Простір імен - це набір імен, який не повинен суперечити таким самим іменам інших наборів імен. Наступна програма ілюструє використання однакових імен із двох різних просторів імен, застосованих у просторі імен функції main ():

#включати
використання простору імен std;
простір імен NS1

int myInt = 8;
float flt;

простір імен NS2

int myInt = 9;
float flt;

int main ()

кут << NS1::myInt << '\n';
кут << NS2::myInt << '\n';
NS1 :: flt = 2.5;
NS2 :: flt = 4.8;
кут << NS1::flt << '\n';
кут << NS2::flt << '\n';
повернути 0;

Результат:

9

8

2.5

4.8

У коді є два суперечливі однакові імена int і два однакові імена з плаваючою комою.

Шаблон та спеціалізація шаблонів

Шаблонна схема дозволяє використовувати заповнювач для різних можливих скалярних типів. Спеціалізація - це вибір конкретного скалярного типу. Наступний код ілюструє це для функції:

#включати
використання простору імен std;
шаблон void func (T cha, U no)

кут << "I need bread for " << cha << no << '.' << '\n';

int main ()

func ('$', 3);
повернути 0;

Результат:

«Мені потрібен хліб за 3 долари."

Пакет параметрів шаблону

Компілятори все ще повинні повністю реалізувати цю функцію - див. Далі.

Висновок

Типи C ++ існують у двох категоріях: основні типи та складені типи. Фундаментальні типи - це скалярні типи. Основні складені типи - це масиви, перелічення, класи, об'єднання, посилання, покажчики та функції. Ці основні типи складок використовуються для побудови детально розроблених типів складок, які представляють собою typedef, структуровані прив'язки, бітові поля, простір імен та функції шаблону.

Кріс

Найкращі ігри для гри з відстеженням рук
Нещодавно Oculus Quest представив чудову ідею відстеження рук без контролерів. Завдяки постійно зростаючій кількості ігор та заходів, які виконують пі...
Як показати накладання екранного меню в повноекранному додатку та іграх для Linux
Гра у повноекранні ігри або використання додатків у повноекранному повноекранному режимі може відключити від відповідної системної інформації, видимої...
Топ 5 карт для захоплення ігор
Ми всі бачили і любили потокові ігри на YouTube. PewDiePie, Jakesepticye та Markiplier - лише деякі з найкращих геймерів, які заробили мільйони, заван...