Változók C ++ -ban
A C ++ változó megnevezett tárolási lehetőséget biztosít számunkra. Lehetővé teszi a programozó számára, hogy az igényeknek megfelelően manipulálja az adatokat. Minden változó típusa C ++. A változó típusa segít meghatározni a változó memóriatérképének méretét és elrendezését, az abban a memóriában tárolható értéktartományt és a rá alkalmazható műveletek halmazát.
Ebben a C ++ oktatóanyagban megtudhatja:
- Változók C ++ -ban
- A változók alapvető típusai C ++ nyelven
- A változók C ++ nyelven történő deklarálásának szabályai
- C ++ változó adattípusok
- Változó neve vagy azonosítói
- Const Qualifier C ++ nyelven
- A változók köre C ++ - ban
- Változó típusú konverzió
- Változók regisztrálása
- Menekülési szekvenciák
A változók alapvető típusai C ++ nyelven
Itt vannak a C ++ változók alapvető típusai:
Int:
Az egész szám egy numerikus literál (számokkal társítva), töredék vagy exponenciális rész nélkül. Példa. 120, -90 stb.
Kettős:
Ez kettős pontosságú lebegőpontos érték. Példa: 11.22, 2.345
Char:
A karakter literál úgy jön létre, hogy egyetlen karaktert idézőjelek közé tesz. Például: 'a', 'm', 'F', 'P', '}' stb.
Úszó:
A lebegőpontos literál olyan numerikus literál, amelynek vagy tört, vagy kitevő alakja van. Például: 1.3, 2.6
Vonós literálok:
A karakterlánc egy karaktersorozat kettős idézőjelbe foglalva. Például: "Hogy vagy?"
Bool:
A logikai értéket igaznak vagy hamisnak tartja.
A változók C ++ nyelven történő deklarálásának szabályai
Íme néhány általános szabály a változó elnevezéséhez:
- A C ++ változó neve csak ábécét, számot és aláhúzást tartalmazhat.
- A C ++ változó neve nem kezdődhet számmal.
- A változó nevek nem kezdődhetnek nagybetűvel.
- A C ++ nyelven használt változó neve nem lehet kulcsszó. Például az int olyan kulcsszó, amelyet egész számok jelölésére használunk.
- A C ++ változó neve aláhúzással kezdődhet. Ez azonban nem számít jó gyakorlatnak.
C ++ változó adattípusok
A C ++ egy egész primitív halmazt határoz meg
A void típushoz nincsenek társítva értékek, és csak néhány esetben használható. Leggyakrabban olyan függvények visszatérési típusaként, amelyek nem adnak vissza értéket.
A számtani típusok karaktereket, egész számokat, logikai értékeket és lebegőpontos számokat tartalmaznak. Számtani típus, ha további 2 kategóriára oszlik
- Lebegőpontos típusok . Az úszó (vagy lebegő típus) tizedes számokat képvisel. Az IEEE szabvány meghatározza a számjegyek minimális számát. A legtöbb fordító általában nagyobb pontosságot nyújt, mint a megadott minimum. Az úszókat általában 32 bites, a dupla 64 bites, a hosszú dupla pedig 96 vagy 128 bites ábrázolja.
- Integrált típusok (amelyek tartalmazzák a karaktert, az egész számot és a logikai típust). A logikai típusnak csak kétféle értéke van: Igaz vagy Hamis. Számos char típus létezik, amelyek többsége a nemzetközivé válás támogatására létezik. A legalapvetőbb karaktertípus a char. A karakter akkora, mint egy gép bájt, ami egyetlen bájtot jelent.
Az Integral típusok lehetnek aláírva vagy aláíratlanul.
Aláírt típus : Negatív vagy pozitív számokat képviselnek (beleértve a nullát is). Aláírt típus esetén a tartományt egyenletesen kell elosztani a + ve és -ve értékek között. Így egy 8 bites előjeles karakter -127 és 127 közötti értékeket tartalmaz.
Aláíratlan típus : Előjel nélküli típusban az összes érték> = 0. Egy 8 bites előjel nélküli karakter 0 és 255 között lehet (mindkettőt beleértve).
Változó neve vagy azonosítói
Az azonosítók állhatnak egyes betűkből, számjegyekből és az aláhúzás karakteréből, vagy ezek kombinációjából. A név hosszára nincs korlátozás.
Az azonosítóknak meg kell adniuk
- vagy betűvel vagy aláhúzással kezdődik ('_').
- És megkülönböztetik a kis- és nagybetűket; a kis- és nagybetűk megkülönböztethetők:
// négy különböző int változót határoz meg
int guru99, gurU99, GuRu99, GURU99;
A C ++ nyelv fenntartott néhány nevet a használatához.
Számos elfogadott konvenció létezik a változók különböző programozási nyelveken történő elnevezésére. Ezen egyezmények betartása javíthatja a program olvashatóságát.
- Az azonosítónak legalább némi jelzést kell adnia a jelentéséről.
- A változó nevek általában kisbetűsek-guru99, nem pedig Guru99 vagy GURU99.
- Az általunk meghatározott osztályok általában nagybetűvel kezdődnek.
- A több szót tartalmazó azonosítóknak vizuálisan meg kell különböztetniük az egyes szavakat. Például a guru99_website nem a guru99website.
C ++ változó nyilatkozat és meghatározás
Egy változó deklarációja a program számára ismertté teszi a nevet abban a körben, amelyben meghatározták. Példa:
int a=5;int b;char c='A';
int a,b;a=b=1000;
List initializationint a(5);int b{5};
Const Qualifier C ++ nyelven
Tegyük fel, hogy van egy változó buffsize, amely meghatározza a felhasználótól elvihető bemenetek számát. Itt nem akarjuk megváltoztatni a buffsize értékét a program során. Meg akarunk határozni egy olyan változót, amelynek értéke tudjuk, hogy nem változik.
Ilyen esetben használja a const kulcsszót
const int bufSize = 512; // input buffer size
Ez a bufSize-t konstansként definiálja. A bufSize hozzárendelésére vagy megváltoztatására tett bármilyen kísérlet hibát okoz.
Itt nem tudjuk megváltoztatni egy const objektum értékét, miután létrehoztuk, kötelezővé kell tenni, hogy deklaráljuk és inicializáljuk. Ellenkező esetben a fordító hibát dob.
const int i = get_size(); // ok: initialized at run timeconst int j = 42; // ok: initialized at compile timeconst int k; // error: k is uninitialized constint i = 42;const int ci = i; // ok: the value in i is copied into ci
A változók köre C ++ - ban
A hatókör egy olyan programtartomány, ahol a változónak jelentése van. Többnyire ugyanaz a név használható a különböző hatókörön belüli különböző entitásokra. A változók a deklarálásuk kezdetétől a deklaráció megjelenési körének végéig láthatók.
#includeint main(){int sum = 0;// sum values from 1 through 10 inclusivefor (int val = 1; val <= 10; ++val)sum += val; // equivalent to sum = sum + valcout << "Sum of 1 to 10 inclusive is "<< sum < Ez a program 3 nevet határoz meg, nevezetesen: fő, összeg és val. Az std névtér nevet használja, a névtér-cout és endl két másik névvel együtt.
- A "main" függvénynév a göndör zárójeleken kívül van megadva. A main függvénynévhez hasonlóan a legtöbb más, a függvényen kívül definiált név globális hatókörrel rendelkezik. Ami azt jelenti, hogy miután deklarálták, a globális hatókörű nevek az egész programban elérhetők.
- A változó összeget a blokk hatókörében határozzuk meg, amely a fő funkció törzse. A bejelentési ponttól és a fő funkció teljes testén keresztül elérhető. Azonban nem azon kívül. Ez azt jelenti, hogy a változó összeg blokk hatóköre .
- A val változót a "for utasítás" hatókörében definiáljuk. Könnyen használható ebben az utasításban, de máshol nem a fő funkcióban. Ez a helyi körét .
Beágyazott hatókör
A hatókör egyéb hatóköröket is tartalmazhat. A tartalmazott (vagy beágyazott) hatókört belső hatókörnek nevezzük. A tartalmazó hatókör a külső hatókör.
#includeusing 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 nameint reused = 42; // reused has global scopeint main(){int unique = 0; // unique has block scope// output #1: uses global reused; prints 42 0cout << reused << " " << unique << endl;int reused = 0; // new, local object named reused hides global reused// output #2: uses local reused; prints 0 0cout << reused << " " << unique << endl;// output #3: explicitly requests the global reused; prints 42 0cout << ::reused << " " << unique << endl;return 0;} Az 1. kimenet az újrafelhasználás helyi definíciója előtt jelenik meg. Így ez a kimenet
utasítás az, amely az újrafelhasználott nevet használja, amely globális terjedelemben van meghatározva. Ez az állítás eredményezi
42 0
A 2. kimenet az újrafelhasználás helyi meghatározása után következik be. Most hatálya alá tartozik. Ezért ez a második kimeneti utasítás egyszerűen az újrafelhasznált helyi objektumot használja, nem pedig a globálisat és az outputokat
0 0
A 3. kimenet felülírja az alapértelmezett hatókörszabályokat a hatókör operátor használatával. A globális hatókörnek nincs neve. Így amikor a hatókör operátor (: :) üres bal oldala van. Kérésként értelmezi a név beolvasását a globális hatókör jobb oldalán. Így a kifejezés a globális újrafelhasználást és az outputokat használja
42 0
Változó típusú konverzió
Egy típusú változó átalakítható másikká. "Típusátalakítás" néven ismert. Nézzük meg a különböző C ++ változótípusok konvertálásának szabályait:
Ha nem bool értéket rendel hozzá bool változóhoz, akkor hamis értéket kapunk, ha az érték 0, és másként igaz.
bool b = 42; // b is trueA bool hozzárendeléséhez a többi számtani típushoz 1-et kap, ha a bool igaz, és 0, ha a bool hamis.
bool b = true;int i = b; // i has value 1Lebegőpontos érték hozzárendelése int típusú változóhoz megkapja a csonka értéket. A tárolt érték a tizedesjegy előtti rész.
int i = 3.14; // i has value 3Az int érték hozzárendelése egy úszó típusú változóhoz azt eredményezi, hogy a tört rész nulla lesz. A pontosság általában elvész, ha az egész számnak több bitje van, mint amennyit a lebegő változó be tud fogadni.
Int i=3;double pi = i; // pi has value 3.0Ha megpróbálunk tartományon kívüli értéket rendelni egy aláíratlan típusú változóhoz, az eredmény a% (modulo) érték fennmaradó része
Például egy 8 bites, előjel nélküli karaktertípus 0 és 255 közötti értékeket tartalmazhat (beleértve). A tartományon kívüli érték hozzárendelése azt eredményezi, hogy a fordító az érték maradékát hozzárendeli a modulo 256-hoz. Ezért a fenti logika szerint -1-et rendelve egy 8 bites előjel nélküli karakterhez, ez az objektum 255-ös értéket kap.
unsigned char c = -1; // assuming 8-bit chars, c has value 255Ha megpróbálunk tartományon kívüli értéket rendelni egy aláírt típusú objektumhoz, az eredmény kiszámíthatatlan. Nincs meghatározva. Úgy tűnik, hogy a program kívülről működik, összeomlik, vagy szemétértékeket produkál.
signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefinedA fordító ugyanazt a típusú konverziót alkalmazza, amikor egy típusú értéket használunk, ahol más típusú érték várható.
int i = 42;if (i) // condition will evaluate as truei = 0;Ha ez az érték = 0, akkor a feltétel hamis; az összes többi (nem nulla) érték igaz. Ugyanezen koncepció szerint, amikor egy boolot számtani kifejezésben használunk, annak értéke mindig 0-ra vagy 1-re konvertálódik. Ennek eredményeként a bool számtani kifejezésben való használata általában szinte biztosan helytelen.
Vigyázat: Ne keverje az aláírt és az aláíratlan típusokat
Az aláírással és az aláírással kevert kifejezések meglepő és rossz eredményeket hozhatnak, ha az aláírt érték negatív. Amint a fentiekben tárgyaltuk, az aláírt értékeket automatikusan konvertáljuk előjel nélkülivé.
Például olyan számtani kifejezéssel, mint
x* yHa x értéke -1 és y értéke 1, és ha mind x, mind y értéke int, akkor az érték a várakozásoknak megfelelően -1.
Ha x int és y nincs aláírva, akkor ennek a kifejezésnek az értéke attól függ, hogy egy egész szám hány bit van a fordító gépen. Gépünkön ez a kifejezés 4294967295-et eredményez.
Változók regisztrálása
A regiszter változókhoz a memóriaváltozókhoz képest gyorsabban lehet hozzáférni. Tehát a C ++ programban gyakran használt változókat regisztrációs kulcsszóval be lehet helyezni a regiszterekbe . A regiszter kulcsszó arra utasítja a fordítót, hogy tárolja az adott változót egy regiszterben. A fordító döntése, hogy nyilvántartásba helyezi-e vagy sem. Általában a fordítók maguk végeznek különféle optimalizálásokat, amelyek magukban foglalják a változók egy részének a nyilvántartásba helyezését. A C ++ program regiszterváltozóinak száma nincs korlátozva. De lehet, hogy a fordító nem tárolja a változót egy regiszterben. Ennek oka, hogy a regisztrációs memória nagyon korlátozott, és általában az operációs rendszer használja.
Meghatározni:
register int i;Hozzászólások
A megjegyzések a kód azon részei, amelyeket a fordító figyelmen kívül hagy. Lehetővé teszi a programozó számára, hogy jegyzeteket készítsen a forráskód / program megfelelő területein. A megjegyzések blokk formában vagy egysoros formában érkeznek. A program megjegyzései magyarázó állítások. Beilleszthető a C ++ kódba, amely segít bárkinek, aki elolvassa a forráskódját. Minden programozási nyelv lehetővé teszi a megjegyzések valamilyen formáját. A C ++ egy- és többsoros megjegyzéseket egyaránt támogat.
- Az egysoros megjegyzések azok, amelyek // -nel kezdődnek és a sor végéig folytatódnak. Ha egy megjegyzéssor utolsó karaktere \, akkor a megjegyzés a következő sorban folytatódik.
- A többsoros megjegyzések azok, amelyek / * -vel kezdődnek és * / -nel végződnek.
/* This is a comment *//* C++ comments can also* span multiple lines*/Menekülési szekvenciák
Egyes karakterek, például a visszalépés és a vezérlő karakterek, nem rendelkeznek látható képpel. Az ilyen karaktereket nem nyomtatható karaktereknek nevezzük. Más karakterek (egy- és dupla idézőjelek, kérdőjel és visszavágás) különleges jelentéssel bírnak a sok programozási nyelvben.
Programjaink nem képesek közvetlenül használni ezeket a karaktereket. Ehelyett használhatunk egy menekülési szekvenciát az ilyen jellegzetesség képviseletére. A menekülési sorrend visszavágással kezdődik.
A C ++ programozási nyelv számos menekülési szekvenciát határoz meg:
Mit csinal?
karakter
Új sor
\ n
Függőleges fül
\ v
Visszavágás
\\
Kocsi vissza
\ r
Vízszintes fül
\ t
Backspace
\ b
Kérdőjel
\?
Formfeed
\ f
Riasztás (csengő)
\ a
Dupla idézet
\ "
Egyetlen idézet
\ '
Menekülési sorrendet használunk, mintha egyetlen karakter lenne:
cout << '\n'; // prints a newlinecout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newlineÍrhatunk általánosított menekülési szekvenciákat \ x, amelyeket egy vagy több hexadecimális szám követ. Vagy használunk egy \ -t, amelyet egy, kettő vagy három oktális szám követ. Az általánosított menekülési szekvencia a karakter numerikus értékét képviseli. Néhány példa (feltételezve a Latin-1 karakterkészletet):
\7 (bell) \12 (newline) \40 (blank)\0 (null) \115 ('M') \x4d ('M')Használhatunk előre definiált menekülési szekvenciákat, mint bármely más karaktert.
cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newlinecout << '\115' << '\n'; // prints M followed by a newlineÖsszegzés
- A C ++ változó megnevezett tárolási lehetőséget biztosít számunkra.
- C ++ változó típusok: int, double, char, float, string, bool stb.
- A tartalmazott (vagy beágyazott) hatókört belső hatókörnek nevezzük, a benne lévő hatókör pedig a külső hatókörnek.
- Egy típusú változó átalakítható másikká. "Típusátalakítás" néven ismert.
- A regiszter változókhoz a memóriaváltozókhoz képest gyorsabban lehet hozzáférni.
- A megjegyzések a kód azon részei, amelyeket a fordító figyelmen kívül hagy.
- Egyes karakterek, például a visszalépés és a vezérlő karakterek, nem rendelkeznek látható képpel.