Typy C ++

Typy C ++
Entity C ++ to wartość, obiekt, odniesienie, funkcja, wyliczenie, typ, element klasy, pole bitowe, wiązanie strukturalne, przestrzeń nazw, szablon, specjalizacja szablonu lub pakiet parametrów. Jednostka może być jednym lub więcej typów. Istnieją dwie kategorie typów C ++: typy podstawowe i złożone. Skalar jest arytmetyczny lub typu wskaźnika. Typy podstawowe to skalarie, a reszta typów jednostek to typy złożone.

Pamięć komputera to seria komórek. Każda komórka ma wielkość jednego bajtu, zwykle jest to przestrzeń zajmowana przez postać Zachodniej Europy. Rozmiar obiektu jest podawany w bajtach. Ten artykuł zawiera podsumowanie typów C ++. Powinieneś już mieć podstawową wiedzę na temat C ++, aby zrozumieć ten artykuł.

Treść artykułu

- Typy podstawowe
- Sposoby konstruowania typów złożonych
- Tablice
- Wyliczenie
- Klasa
- Unia
- Bibliografia
- Funkcje
- Inne typy złożone
- Wniosek

Typy podstawowe

Typy podstawowe to typy skalarne.

Bool

Typ boolean lub typ bool ma wartość prawdziwej lub fałszu dla 1 lub 0. Prawda lub fałsz zajmuje jeden bajt.

char, niepodpisany char i podpisał Char

Char jest zazwyczaj dla jednej postaci Europy Zachodniej. Zazwyczaj zajmuje jeden bajt. Istnieje również niepodpisany i podpisany char. Niepodpisane znaki nie obejmują wartości ujemnych, podczas gdy podpisane znaki obejmują wartości ujemne. Rodzaj wartości, którą utrzymuje char, zależy od kompilatora i może być po prostu niepodpisanym charakterem. Te trzy rodzaje zwariów są nazywane, wąskie typy znaków, a każdy zajmuje jeden bajt.

Liczba całkowita

Istnieje pięć niepodpisanych standardowych typów liczb całkowitych i pięć podpisanych standardowych typów liczb całkowitych. Pięć typów liczb całkowitych niepodpisanych to: „niepodpisany Char”, „Unsigned Short Int”, „Unsigned Int”, „Unsigned Long Int” i „Unsigned Long Long Int”. Pięć odpowiednich podpisanych typów liczb całkowitych to: „Podpisany Char”, „Short Int”, „Int”, „Long Int” i „Long Long Int”.

„Niepodpisany char” to ten sam typ co wąskie typy znaków (patrz wyżej). „Podpisany char” to drugi rodzaj wąskich typów znaków (patrz wyżej).

Z kompilatorem G ++ „niepodpisany char” lub „podpisany char” zajmuje jeden bajt; „Unsigned Short Int” lub „Short Int” zajmuje dwa bajty; „Unsigned Int” lub „Int” zajmuje cztery bajty; „Unsigned Long Int” lub „Long Int” zajmuje 8 bajtów; „Unsigned Long Long Int” lub „Long Long Int” nadal zajmuje 8 bajtów (na razie).

char16_t, char32_t, wchar_t

W kontaktach z postaciami Europy Zachodniej typ typu charyt wystarczy w wielu sytuacjach. Jednak w przypadku języków chińskich i innych języków wschodnich potrzebne jest Char16_T lub Char32_T lub Wchar_t. Z kompilatorem G ++, Char16_T zajmuje dwa bajty; char32_t zajmuje cztery bajty, a WChar_t również zajmuje cztery bajty.

Bool, Char16_T, Char32_T, WCAR_T, podpisane i niepodpisane typy liczb całkowity.

W tym momencie artykułu wspomniano dwa typy zbiorowe: wąskie typy znaków i integralne typy.

Punkty pływające

Załóżmy, że liczby 457 000 i 457 230 to ten sam odczyt, mierzony przez dwa różne instrumenty pomiarowe. 457 230 jest bardziej precyzyjne niż 457 000, ponieważ wartość jest bardziej szczegółowa (obejmuje mniejsze miejsca: + 200 plus 30). Liczba zmiennoprzecinkowa to liczba z częścią ułamkową (dziesiętną). Chociaż liczby na komputerze są sekwencją bitów, niektóre liczby zmiennoprzecinkowe są bardziej precyzyjne niż inne.

Niektóre instrumenty pomiarowe wykonują pomiary w minimalnych krokach, powiedzmy 10 jednostek. Taki instrument miałby następujące odczyty: 10, 20, 30, 40,… 100, 110, 130, 140,… 200, 210, 220, 230, 240 i tak dalej. Chociaż liczby na komputerze są sekwencją bitów, liczby zmiennoprzecinkowe wahają się w niektórych minimalnych etapach (znacznie mniejsze niż 10 jednostek).

C ++ ma trzy typy punktów zmiennoprzecinkowych, które są: pływak, podwójny i długi. W przypadku każdego kompilatora podwójne musi mieć precyzję, która jest wyższa niż w przypadku pływaka lub przynajmniej float; długi podwójny musi mieć precyzję, która jest wyższa niż w przypadku podwójnego lub przynajmniej podwójnego.

Istnieje trzecia nazwa zbiorowa: typ arytmetyczny. To jest nazwa typów integralnych i zmiennoprzecinkowych. Zauważ, że jest to również nazwa dla wszystkich typów skalarnych, jak wyjaśniono do tej pory.

W przypadku kompilatora G ++ liczba bajtów dla pływaka wynosi cztery; Liczba bajtów dla podwójnego wynosi osiem; Liczba bajtów dla długiego podwójnego wynosi szesnaście.

Typ pustki

Z kompilatorem G ++ rozmiar typu pustki to jeden bajt. Bajt oficjalnie nie ma bitów, co oznacza, że ​​jego lokalizacja ma puste treści.

Sposoby konstruowania typów złożonych

Typy złożone są typami nie finansowymi. Oznacza to, że typy złożone są typami innych. W tej sekcji wyjaśniono podstawy typów złożonych.

Tablice

Poniższy segment kodu pokazuje szereg Ints i szereg znaków:

int arrint [] = 1, 2, 3, 4, 5;
Char Arrcha [] = „A”, „B”, „C”, „D”, „E”;
Cout << arrInt[2] <<" <Wyjście to: 3 c.

Wyliczenie

Wyliczenie jest typem, z nazwanymi stałymi. Rozważ następujący segment kodu:

enum a = 3, b, c;
Cout << b <<'\n';

Wyjście to: 4. Pierwszy wiersz segmentu kodu to wyliczenie, a A, B lub C jest wyliczką.

Klasa

Klasa jest uogólnioną jednostką, z której można utworzyć wiele obiektów tej samej uogólnionej jednostki (utworzone). Poniższy program pokazuje klasę i dwa obiekty, utworzone z niej. Taki obiekt różni się od obiektu skalarnego.

#włączać
za pomocą przestrzeni nazw Std;
klasa thecla

publiczny:
int num = 5;
int fn ()
return num;

;
int main ()

Thecla obj1;
Thecla obj2;
Cout << obj1.num << " << obj2.num <<'\n';
powrót 0;

Wyjście to: 5 5. Nazwa klasy to THECLA, a nazwy dwóch obiektów to OBJ1 i OBJ2. Zwróć uwagę na półkolis tuż po opisie (definicji) klasy. Zwróć uwagę, w jaki sposób dwa obiekty zostały utworzone w funkcji Main ().

Uwaga: NUM jest elementem danych, a FN jest funkcją członka.

Unia

struct

Struktura jest jak tablica, ale zamiast mieć par indeksu/wartości, ma pary nazwy/wartości. Nazwy mogą być napisane w dowolnej kolejności. Poniższy program pokazuje strukturę i jego użycie:

#włączać
za pomocą przestrzeni nazw Std;
struct thecla
int num = 5;
float flt = 2.3;
char ch = „a”;
obj1, obj2;
int main ()

Cout << obj2.num <<", "<< obj2.flt <<
","<< obj2.ch <<'\n';
powrót 0;

Wyjście to:

5, 2.3, a

Nazwa struktury to thecla. Obj1 i obj2 to dwa różne obiekty struktury.

Unia

Poniższy program pokazuje związek i jego użycie:

#włączać
za pomocą przestrzeni nazw Std;
Union thecla
int num;
float flt = 2.3;
char ch;
obj1, obj2;
int main ()
Cout << obj2.flt <<'\n';
powrót 0;

Wyjście to: 2.3. Związek jest podobny do struktury. Główną różnicą między strukturą a unii jest to, że dla struktury tylko jeden element może mieć wartość (zainicjowana) w dowolnym momencie. W powyższym programie członek FLT ma wartość 2.3. Każdy z pozostałych członków, num lub ch, może mieć wartość następną tylko wtedy, gdy wartość FLT zostanie porzucona.

Bibliografia

Odniesienie jest synonimem identyfikatora. Poniższy segment kodu pokazuje, jak uzyskać odniesienie do identyfikatora:

int id = 5;
int & ref1 = id;
int & ref2 = id;
Cout << id << " << ref1 <<
" << ref2 <<'\n';

Wyjście to: 5 5 5. Ref1 i ref2 są synonimami identyfikatora.

Odniesienie LVALUE i odniesienie RVALUE

Powyższe odniesienia to referencje LVALUE. Poniższy kod pokazuje odniesienie RVALUE:

int && ref = 5;
Cout << ref <<'\n';

Wyjście to: 5. To odniesienie jest tworzone bez identyfikacji jakiejkolwiek lokalizacji w pamięci. Aby to osiągnąć, podwójnie i jest potrzebne, ja.mi., &&.

Wskaźnik

Wskaźnik nie jest tak naprawdę jednostką C ++. Jednak stanowi lepszy program do radzenia sobie z referencjami. Poniższy kod pokazuje, w jaki sposób można utworzyć wskaźnik:

int Ptdid = 5;
int Ptdid = 5;
int *ptrid;
ptrid = &ptdId;
Cout << *ptrId <<'\n';

Wyjście to: 5. Zwróć uwagę na różnicę nazwy między PTDID i PTDID. PTDID jest spiczastym obiektem, a ptrid to obiekt wskaźnika. & PtDID zwraca adres spiczastego obiektu przypisany do Ptrid. Aby zwrócić wartość spiczastego obiektu, użyj *ptrid.

Funkcje

Podstawowa funkcja i jej wywołanie

Poniższy kod pokazuje podstawową definicję funkcji i jej wywołanie:

#włączać
za pomocą przestrzeni nazw Std;
int fn (int num)
Cout<<"seen"<<'\n';
return num;

int main ()
int ret = fn (5);
Cout << ret <<'\n';
powrót 0;

Wyjście jest

widziany
5

Wywołanie funkcyjne to FN (5). Nazwa funkcji to FN.

Odniesienie i wskaźnik do funkcji

i FN Zwróć adres w pamięci funkcji, której nazwa to FN. Poniższe stwierdzenie deklaruje wskaźnik do funkcji:

int (*func) ();

Tutaj FUNC to nazwa wskaźnika do funkcji. Pierwsza para nawiasów różnicuje ten wskaźnik funkcji od wskaźnika obiektu skalarnego. FUNC można utrzymać adres funkcji zidentyfikowanej przez FN, w następujący sposób:

func = &fn;

Poniższy program wprowadza odniesienie do funkcji i wskaźnik:

#włączać
za pomocą przestrzeni nazw Std;
int fn (int num)
/ * niektóre stwierdzenia */
return num;

int main ()

int (*func) (int);
func = &fn;
int ret = func (5);
Cout << ret <<'\n';
powrót 0;

Wyjście to: 5. Zauważ, że zarówno FN, jak i FUNC mają parametr INT w deklaracji.

Inne typy złożone

Powyższe podstawowe typy związków są złożone same w sobie. Są również używane do konstruowania opracowanych typów związków.

typedef

Słowo zarezerwowane przez typedef służy do zastąpienia sekwencji typów jedną nazwą (dla sekwencji). Poniższy segment kodu to ilustruje:

Typedef unsigned Long int Iduil;
IDUIL MYINT = 555555555555555555;
Cout << myInt <<'\n';

Wyjście to 5555555555555555555. W kodzie Iduil stał się typem „niepodpisanego długiego int”.

Strukturalne wiązanie

Wiązanie strukturalne jest cechą, która umożliwia podanie podobiek. Poniższy kod ilustruje to dla tablicy:

int arr [3] = 1, 2, 3;
auto [x, y, z] (arr);
Cout << x <<"<< y <<"<< z <<'\n';

Wyjście to 1 2 3. Tak więc wartości: 1, 2, 3 otrzymały nazwy, x, y, z. Zwróć uwagę na użycie i pozycję zarezerwowanego słowa, automatyczne. Zwróć również uwagę na użycie kwadratowych nawiasów.

Pola bitowe

Pamięć jest sekwencją komórek. Każda komórka bierze bajt. Również każdy bajt składa się z ośmiu bitów. Grupa bitów, niekoniecznie osiem bitów, można ustawić i zmienić. Taka grupa nazywa się pola bitowym. Te grupy leżałyby obok siebie. Jeśli grupy nie stanowią typu, powiedz 16 bitów dla krótkiego int, dodaje się bity wyściółki. Poniższy kod ilustruje to strukturą:

Data struktury
niepodpisany krótki dzień: 3; // 3 bity
niepodpisany krótki poniedziałek: 6; // 6 bitów
niepodpisany krótki pon, mon: 5; // 5 bitów
niepodpisany krótki lat: 8; // 8 bitów na 2 cyfrowy rok
dte;
dte.wkday = 1; dte.Poniedziałek = 2; dte.mon = 2; dte.YR = 21;
Cout << dte.mon <<'/'<< dte.monDay <<'/'<< dte.yr <<'\n';

Wyjście to: 2/2/21. Całkowita liczba bitów na WKDAD, poniedziałek i MON wynosi 3 + 6 + 5 = 14. Tak więc dodanoby dwa bity wyściółki, aby stanowić 16 bitów dla krótkiej liczby całkowitej 2 bajtów (16 bitów). Następne 8 bitów rozpoczyna się następny krótki int, który jest następnie wypełniony 8 bitami wyściółki.

Uwaga: Unikaj używania pól bitów; Używaj go tylko do badań.

Przestrzeń nazw

Przestrzeń nazw to zestaw nazw, który nie powinien być sprzeczny z tymi samymi nazwami innych zestawów nazwisk. Poniższy program ilustruje użycie tych samych nazw z dwóch różnych przestrzeń nazw, zastosowanych w przestrzeni nazw funkcji Main ():

#włączać
za pomocą przestrzeni nazw Std;
Przestrzeń nazw NS1

int myint = 8;
float flt;

Przestrzeń nazw NS2

int myint = 9;
float flt;

int main ()

Cout << NS1::myInt << '\n';
Cout << NS2::myInt << '\n';
Ns1 :: flt = 2.5;
Ns2 :: flt = 4.8;
Cout << NS1::flt << '\n';
Cout << NS2::flt << '\n';
powrót 0;

Wyjście to:

9
8
2.5
4.8

Istnieją dwa sprzeczne same nazwy int i dwa sprzeczne nazwy samych pływaków w kodzie.

Specjalizacja szablonu i szablonu

Schemat szablonów umożliwia użycie symboliki zastępczej dla różnych możliwych typów skalarnych. Specjalizacja wybiera określony typ skalarny. Poniższy kod ilustruje to dla funkcji:

#włączać
za pomocą przestrzeni nazw Std;
szablon
void func (t cha, u no)
Cout << "I need bread for " << cha << no << '.' << '\n';

int main ()

FUNC („$”, 3);
powrót 0;

Wyjście to:

Potrzebuję chleba za 3 USD.

Szablon pakiet parametrów

Kompilatory mają nadal w pełni zaimplementować tę funkcję - patrz później.

Wniosek

Typy C ++ istnieją w dwóch kategoriach: typy podstawowe i typy złożone. Typy podstawowe to typy skalarne. Podstawowe typy związków to tablice, wyliczenia, klasy, związki, odniesienia, wskaźniki i funkcje. Te podstawowe typy związków są używane do konstruowania opracowanych typów związków, które są typeDef, wiązania strukturalne, pola bitów, przestrzeń nazw i szablon.