C++ Varijable i tipovi: Int, Char, Float, Double, String & Bool
Varijable u C++
A C++ varijabla nam daje sposobnost imenovane pohrane. Omoguฤuje programeru da manipulira podacima prema potrebi. Svaka varijabla ima svoj tip C++. Vrsta varijable pomaลพe u odreฤivanju veliฤine i rasporeda memorijske mape varijable, raspona vrijednosti koje se mogu pohraniti unutar te memorije i skupa operacija koje se na nju mogu primijeniti.
Osnovni tipovi varijabli u C++
Evo osnovnih vrsta C++ varijable:
Int:
Cijeli broj je numeriฤki literal (povezan s brojevima) bez razlomka ili eksponencijalnog dijela. Primjer. 120, -90 itd.
Double:
To je vrijednost s pomiฤnim zarezom dvostruke preciznosti. Primjer: 11.22, 2.345
znak:
Znakovni literal se stvara zatvaranjem jednog znaka unutar jednostrukih navodnika. Na primjer: 'a', 'm', 'F', 'P', '}' itd.
Plutati:
Literal s pomiฤnim zarezom je numeriฤki literal koji ima oblik razlomka ili oblik eksponenta. Na primjer: 1.3, 2.6
String literali:
String literal je niz znakova unutar dvostrukih navodnika. Na primjer: "Kako si?"
Bool:
Sadrลพi Booleovu vrijednost true ili false.
Pravila deklariranja varijabli u C++
Evo nekih uobiฤajenih pravila za imenovanje varijable:
- A C++ naziv varijable moลพe sadrลพavati samo slova, brojeve i podvlaku.
- A C++ naziv varijable ne moลพe zapoฤeti brojem.
- Imena varijabli ne smiju poฤinjati velikim slovom.
- Naziv varijable koji se koristi u C++ ne moลพe biti kljuฤna rijeฤ. Na primjer, int je kljuฤna rijeฤ koja se koristi za oznaฤavanje cijelih brojeva.
- A C++ naziv varijable moลพe zapoฤeti podvlakom. Meฤutim, to se ne smatra dobrom praksom.
C++ Varijabilne vrste podataka
C++ definira cijeli skup primitivnih tipova
The poniลกtiti tip nema pridruลพene vrijednosti i moลพe se koristiti u samo nekoliko okolnosti. Najฤeลกฤe je kao povratna vrsta funkcija koje ne vraฤaju vrijednost.
The aritmetiฤke vrste ukljuฤuju znakove, cijele brojeve, Booleove vrijednosti i brojeve s pomiฤnim zarezom. Aritmetiฤki tip ako se dalje dijeli u 2 kategorije
- Tipovi s pomiฤnim zarezom. Pomiฤuฤi (ili plutajuฤi tip) predstavljaju decimalne brojeve. IEEE standard navodi minimalni broj znaฤajnih znamenki. Veฤina kompilatora obiฤno daje veฤu preciznost od navedenog minimuma. Obiฤno su float-ovi predstavljeni s 32 bita, double s 64 bita, a long double s 96 ili 128 bita.
- Integralni tipovi (ลกto ukljuฤuje karakterne, cijele brojeve i Booleove tipove). The Booleova type ima samo dvije vrste vrijednosti: True ili False. Ima ih nekoliko ฤaฤ vrste, od kojih veฤina postoji kako bi poduprla internacionalizaciju. Najosnovniji tip znakova je char. Znak je iste veliฤine kao jedan strojni bajt ลกto znaฤi jedan bajt.
The Integralni tipovi moลพe biti potpisan ili nepotpisan.
Potpisani tip: Predstavljaju negativne ili pozitivne brojeve (ukljuฤujuฤi nulu). U tipu s predznakom, raspon mora biti ravnomjerno podijeljen izmeฤu +ve i -ve vrijednosti. Stoga ฤe 8-bitni znak s predznakom sadrลพavati vrijednosti od โ127 do 127.
Nepotpisani tip: U nepredznaฤenom tipu sve su vrijednosti >= 0. 8-bitni nepredznaฤeni char moลพe sadrลพavati 0 do 255 (oba ukljuฤujuฤi).
Naziv varijable ili identifikatori
Identifikatori se mogu sastojati od nekoliko slova, znamenki i podvlake ili neke njihove kombinacije. Duljina imena nije ograniฤena.
Identifikatori moraju
- poฤinju slovom ili podvlakom ('_').
- I razlikuju velika i mala slova; razlikuju se velika i mala slova:
// definira ฤetiri razliฤite int varijable
int guru99, gurU99, GuRu99, GURU99;
The C++ jezik je rezervirao neke nazive za svoju upotrebu.
Postoje mnoge prihvaฤene konvencije za imenovanje varijabli razliฤite programske jezike. Slijeฤenje ovih konvencija moลพe poboljลกati ฤitljivost programa.
- Identifikator bi trebao dati barem neku naznaku svog znaฤenja.
- Imena varijabli obiฤno su mala slovaโguru99, a ne Guru99 ili GURU99.
- Klase koje definiramo obiฤno poฤinju velikim slovom.
- Identifikatori koji sadrลพe viลกe rijeฤi trebali bi vizualno razlikovati svaku rijeฤ. Na primjer, guru99_website ne guru99website.
C++ Deklaracija i definicija varijable
Deklaracija varijable ฤini ime poznatim programu u opsegu u kojem je definirano. Primjer:
int a=5; int b; char c='A';
int a,b; a=b=1000;
List initialization
int a(5);
int b{5};
Const Kvalifikator u C++
Pretpostavimo da postoji varijabla buffsize koja navodi broj unosa koje treba uzeti od korisnika. Ovdje ne ลพelimo mijenjati vrijednost buffsize kroz program. ลฝelimo definirati varijablu za ฤiju vrijednost znamo da se ne bi trebala mijenjati.
U tom sluฤaju koristite kljuฤnu rijeฤ const
const int bufSize = 512; // input buffer size
Ovo definira bufSize kao konstantu. Svaki pokuลกaj dodjele ili promjene bufSize daje pogreลกku.
Ovdje ne moลพemo promijeniti vrijednost const objekta nakon ลกto ga stvorimo, on mora biti obvezno deklariran i inicijaliziran. U suprotnom prevodilac javlja pogreลกku.
const int i = get_size(); // ok: initialized at run time const int j = 42; // ok: initialized at compile time const int k; // error: k is uninitialized const int i = 42; const int ci = i; // ok: the value in i is copied into ci
Opseg varijabli u C++
Opseg je raspon programa u kojem varijabla ima znaฤenje. Uglavnom se isto ime moลพe koristiti za oznaฤavanje razliฤitih entiteta unutar razliฤitih opsega. Varijable su vidljive od toฤke na kojoj su deklarirane do kraja opsega u kojem se pojavljuje njihova deklaracija.
#include <iostream>
int main()
{
int sum = 0;
// sum values from 1 through 10 inclusive
for (int val = 1; val <= 10; ++val)
sum += val; // equivalent to sum = sum + val
cout << "Sum of 1 to 10 inclusive is "<< sum <<endl;
return 0;
}
Ovaj program definira 3 imena, naime, main, sum i val. Koristi ime prostora imena std, zajedno s dva druga imena iz tog prostora imena โ cout i endl.
- Naziv funkcije "main" definiran je izvan vitiฤastih zagrada. Naziv funkcije mainโpoput veฤine drugih naziva definiranih izvan funkcijeโima globalni opseg. ล to znaฤi da jednom deklarirana imena koja se nalaze na globalni opseg dostupni su tijekom cijelog programa.
- Zbroj varijable definiran je unutar opsega bloka koji je tijelo glavne funkcije. Moลพe mu se pristupiti s njegove toฤke deklaracije i kroz ostatak tijela glavne funkcije. Meฤutim, ne izvan njega. To znaฤi da varijabla suma ima opseg bloka.
- Varijabla val je definirana u opsegu "for izjave". Moลพe se lako koristiti u toj izjavi, ali ne i drugdje u glavnoj funkciji. Ima lokalni opseg.
Ugnijeลพฤeni opseg
Opseg moลพe sadrลพavati druge opsege. Sadrลพani (ili ugnijeลพฤeni) opseg naziva se unutarnjim opsegom. Sadrลพi opseg je vanjski opseg.
#include <iostream>
using namespace std;
// Program for illustration purposes only: It is bad style for a function
// to use a global variable and also define a local variable with the same name
int reused = 42; // reused has global scope
int main()
{
int unique = 0; // unique has block scope
// output #1: uses global reused; prints 42 0
cout << reused << " " << unique << endl;
int reused = 0; // new, local object named reused hides global reused
// output #2: uses local reused; prints 0 0
cout << reused << " " << unique << endl;
// output #3: explicitly requests the global reused; prints 42 0
cout << ::reused << " " << unique << endl;
return 0;
}
Izlaz #1 pojavljuje se prije lokalne definicije ponovno koriลกtenog. Dakle, ovaj izlaz
izjava je ona koja koristi ponovno koriลกteno ime koje je definirano u globalnom opsegu. Ova izjava izlazi
42 0
Izlaz #2 javlja se nakon lokalne definicije reused. Sada je u opsegu. Stoga ova druga izlazna izjava jednostavno koristi lokalni objekt pod nazivom reused umjesto globalnog i izlazi
0 0
Izlaz #3 nadjaฤava zadana pravila opsega pomoฤu operator opsega. Globalni opseg nema naziv. Dakle, kada operator opsega(::) ima praznu lijevu stranu. To tumaฤi kao zahtjev za dohvaฤanje imena na desnoj strani globalnog opsega. Dakle, izraz koristi globalne reused i izlaze
42 0
Pretvorba tipa varijable
Varijabla jednog tipa moลพe se pretvoriti u drugu. Poznato je kao "Konverzija tipa". Pogledajmo pravila za pretvaranje razliฤitih C++ vrste varijabli:
Dodjeljivanje ne-bool varijabli bool daje false ako je vrijednost 0 i true u suprotnom.
bool b = 42; // b is true
Dodjeljivanje boola jednom od drugih aritmetiฤkih tipova daje 1 ako je bool istinit i 0 ako je bool laลพan.
bool b = true; int i = b; // i has value 1
Dodjeljivanje vrijednosti s pomiฤnim zarezom varijabli tipa int daje vrijednost koja je skraฤena. Vrijednost koja se pohranjuje je dio prije decimalne toฤke.
int i = 3.14; // i has value 3
Dodjeljivanje int vrijednosti varijabli tipa float rezultira time da razlomaฤki dio postaje nula. Preciznost se obiฤno gubi ako cijeli broj ima viลกe bitova nego ลกto plutajuฤa varijabla moลพe primiti.
Int i=3; double pi = i; // pi has value 3.0
Ako pokuลกamo dodijeliti vrijednost izvan raspona varijabli nepredznaฤenog tipa, rezultat je ostatak vrijednosti %(modulo)
Na primjer, 8-bitni unsigned char tip moลพe sadrลพavati vrijednosti od 0 do 255, ukljuฤujuฤi. Dodjeljivanje vrijednosti izvan ovog raspona rezultirat ฤe dodjeljivanjem ostatka te vrijednosti od strane kompajlera modulo 256. Prema tome, prema gornjoj logici, dodjeljivanje โ1 8-bitnom nepredznaฤenom znaku daje tom objektu vrijednost 255.
unsigned char c = -1; // assuming 8-bit chars, c has value 255
Ako objektu oznaฤenog tipa pokuลกamo dodijeliti vrijednost izvan raspona, rezultat je nepredvidiv. Nedefinirano je. Moลพe se ฤiniti da program izvana radi, ili se moลพe sruลกiti, ili moลพe proizvoditi neispravne vrijednosti.
signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefined
Prevoditelj primjenjuje istu vrstu pretvorbe kada koristimo vrijednost jedne vrste gdje se oฤekuje vrijednost druge vrste.
int i = 42; if (i) // condition will evaluate as true i = 0;
Ako je ova vrijednost = 0, tada je uvjet laลพan; sve druge vrijednosti (ne-nula) daju istinite. Po istom konceptu, kada koristimo bool u aritmetiฤkom izrazu, njegova se vrijednost uvijek pretvara u 0 ili 1. Kao rezultat toga, koriลกtenje boola u aritmetiฤkom izrazu obiฤno je gotovo sigurno netoฤno.
Oprez: ne mijeลกajte oznaฤene i neoznaฤene tipove
Izrazi koji mijeลกaju predznak i nepredznak mogu dati iznenaฤujuฤe i pogreลกne rezultate kada je predznak negativan. Kao ลกto je gore objaลกnjeno, vrijednosti s predznakom automatski se pretvaraju u nepredznaฤene.
Na primjer, u aritmetiฤkom izrazu kao ลกto je
x* y
Ako je x -1 i y je 1, i ako su i x i y int, tada je vrijednost, kao ลกto se i oฤekivalo, -1.
Ako je x int, a y bez predznaka, tada vrijednost ovog izraza ovisi o tome koliko bitova cijeli broj ima na stroju za prevoฤenje. Na naลกem stroju ovaj izraz daje 4294967295.
Registrirajte varijable
Varijablama registara se brลพe pristupa u usporedbi s varijablama memorije. Dakle, varijable koje se ฤesto koriste u a C++ program se moลพe staviti u registre pomoฤu Registrirajte se kljuฤna rijeฤ. Kljuฤna rijeฤ register govori kompajleru da pohrani danu varijablu u registar. Odabir prevoditelja je hoฤe li ga staviti u registar ili ne. Opฤenito, prevoditelji sami rade razliฤite optimizacije koje ukljuฤuju stavljanje nekih varijabli u registar. Ne postoji ograniฤenje broja varijabli registra u a C++ program. Ali kompajler moลพda neฤe pohraniti varijablu u registar. To je zato ลกto je memorija registara vrlo ograniฤena i najฤeลกฤe je koristi OS.
Definirati:
register int i;
Komentari
Komentari su dijelovi koda koje kompajler ignorira. Omoguฤuje programeru da pravi biljeลกke u relevantnim podruฤjima izvornog koda/programa. Komentari dolaze ili u obliku bloka ili u jednom retku. Programski komentari su objaลกnjenja. Moลพe se ukljuฤiti u C++ kod koji pomaลพe svima koji ฤitaju njegov izvorni kod. Svi programski jezici dopuลกtaju neki oblik komentara. C++ podrลพava i jednoredne i viลกeredne komentare.
- Komentari u jednom retku su oni koji poฤinju s // i nastavljaju se do kraja retka. Ako je zadnji znak u retku komentara \ tada ฤe se komentar nastaviti u sljedeฤem retku.
- Viลกeredni komentari su oni koji poฤinju sa /* i zavrลกavaju sa */.
/* This is a comment */ /* C++ comments can also * span multiple lines */
Escape sekvence
Neki znakovi, kao ลกto su povratni razmak i kontrolni znakovi, nemaju vidljivu sliku. Takvi su znakovi poznati kao znakovi koji se ne mogu ispisati. Ostali znakovi (jednostruki i dvostruki navodnici, upitnik i kosa crta) imaju posebno znaฤenje u mnogim programskim jezicima.
Naลกi programi ne mogu izravno koristiti nijedan od ovih znakova. Umjesto toga, moลพemo koristiti escape sekvencu da predstavimo takav char. Escape sekvenca poฤinje obrnutom kosom crtom.
The C++ programski jezik definira nekoliko escape sekvenci:
| ล to to uฤiniti? | Lik |
|---|---|
| Nova linija | \n |
| Okomita kartica | \v |
| Obrnuta kosa crta | \\ |
| Povrat prtljage | \r |
| Vodoravna kartica | \t |
| povratnik | \b |
| Upitnik | \? |
| Ulaganje obrasca | \f |
| Upozorenje (zvono) | \a |
| Double citat | \ " |
| Jedna ponuda | \ ' |
Koristimo izlazni niz kao da se radi o jednom znaku:
cout << '\n'; // prints a newline cout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newline
Takoฤer moลพemo napisati generalizirane izlazne sekvence \x iza kojih slijedi jedna ili viลกe heksadecimalnih znamenki. Ili koristimo \ iza kojeg slijede jedna, ili dvije, ili tri oktalne znamenke. Generalizirani izlazni niz predstavlja numeriฤku vrijednost znaka. Neki primjeri (pod pretpostavkom skupa znakova Latin-1):
\7 (bell) \12 (newline) \40 (blank)
\0 (null) \115 ('M') \x4d ('M')
Moลพemo koristiti unaprijed definirane izlazne sekvence, kao ลกto koristimo bilo koji drugi znak.
cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newline cout << '\115' << '\n'; // prints M followed by a newline
Rezime
- A C++ varijabla nam daje sposobnost imenovane pohrane.
- C++ tipovi varijabli: int, double, ฤaฤ, float, string, bool, itd.
- Sadrลพani (ili ugnijeลพฤeni) opseg naziva se unutarnjim opsegom, a sadrลพajni opseg je vanjski opseg.
- Varijabla jednog tipa moลพe se pretvoriti u drugu. Poznato je kao "Konverzija tipa".
- Varijablama registara se brลพe pristupa u usporedbi s varijablama memorije.
- Komentari su dijelovi koda koje kompajler ignorira.
- Neki znakovi, kao ลกto su povratni razmak i kontrolni znakovi, nemaju vidljivu sliku.


