top 70 c interview questions
Najčastejšie kladené otázky týkajúce sa základných a pokročilých pohovorov v C ++ s príkladmi kódov pre kandidátov na základnej úrovni aj pre skúsených profesionálov:
Tento podrobný článok bude určite záložkou pre tých, ktorí sa pripravujú na rozhovor v C ++.
Téme sú venované takmer všetky hlavné témy v jazyku C ++ spolu s niektorými základnými otázkami o pokročilých témach, ako napríklad Standard Template Library (STL) atď.
Táto sada otázok týkajúcich sa kódovania C ++ vám pomôže sebavedome čeliť akýmkoľvek pohovorom v C ++ a na prvý pokus ho úspešne vyjasniť.
Čo sa dozviete:
- Dotazy na rozhovor v C ++ s príkladmi kódov
Dotazy na rozhovor v C ++ s príkladmi kódov
Nižšie sú uvedené najobľúbenejšie otázky týkajúce sa rozhovorov o programovaní v C ++, na ktoré odpovedá odborník na C ++.
Prečítajte si tiež => Najlepšie otázky týkajúce sa programovania v rámci rozhovoru
Základné C ++
Štruktúra programu C ++
Otázka č. 1) Aká je základná štruktúra programu C ++?
Odpoveď: Ďalej je uvedená základná štruktúra programu C ++:
#include int main() { cout<<”Hello,World!”; return 0; }
Prvý riadok, ktorý sa začína „ # ”Je a preprocesorová smernica . V tomto prípade používame zahrnúť ako smernica, ktorá hovorí kompilátoru, aby zahrnul hlavičku, zatiaľ čo „ iostream.h ”, Ktoré sa použijú pre základný vstup / výstup neskôr v programe.
Ďalším riadkom je funkcia „main“, ktorá vracia celé číslo. Hlavná funkcia je východiskovým bodom vykonania pre akýkoľvek program v C ++. Bez ohľadu na jeho pozíciu v súbore zdrojového kódu, obsah hlavnej funkcie vykoná vždy najskôr kompilátor C ++.
V ďalšom riadku vidíme otvorené zložené zátvorky, ktoré označujú začiatok bloku kódu. Potom uvidíme programovú inštrukciu alebo riadok kódu, ktorý používa počet, ktorý je štandardným výstupným prúdom (jeho definícia je uvedená v iostream.h).
Tento výstupný prúd má reťazec znakov a tlačí ho na štandardné výstupné zariadenie. V tomto prípade je to „Ahoj, svet!“. Upozorňujeme, že každá inštrukcia C ++ končí bodkočiarkou (;), ktorá je veľmi potrebná a jej vynechanie bude mať za následok chyby kompilácie.
Pred zatvorením zátvoriek} sa zobrazí ďalší riadok „return 0;“. Toto je bod návratu k hlavnej funkcii.
Každý program v C ++ bude mať základnú štruktúru, ako je uvedené vyššie, s direktívou preprocesora, deklaráciou hlavnej funkcie, za ktorou nasleduje blok kódu a potom návratovým bodom k hlavnej funkcii, ktorý označuje úspešné vykonanie programu.
Otázka 2) Čo sú to komentáre v C ++?
Odpoveď: Komentáre v C ++ sú jednoducho časťou zdrojového kódu, ktorý kompilátor ignoruje. Programátorovi pomôžu iba pri pridaní popisu alebo ďalších informácií o zdrojovom kóde.
V C ++ existujú dva spôsoby pridávania komentárov:
- // jednoriadkový komentár
- / * blokovať komentár * /
Prvý typ zahodí všetko potom, čo kompilátor zistí „//“. V druhom type kompilátor zahodí všetko medzi „/ *“ a „* /“.
Premenné, typy údajov a konštanty
Otázka č. 3) Rozdiel medzi deklaráciou a definíciou premennej.
Odpoveď: Deklarácia premennej iba špecifikuje dátový typ premennej a názov premennej. Na základe deklarácie povieme kompilátoru, aby vyhradil miesto pre premennú v pamäti podľa zadaného dátového typu.
Príklad:
int Result; char c; int a,b,c;
Všetky vyššie uvedené sú platné vyhlásenia. Upozorňujeme tiež, že v dôsledku deklarácie nie je hodnota premennej stanovená.
Zatiaľ čo definíciou je implementácia / inštancia deklarovanej premennej, kde viazame príslušnú hodnotu na deklarovanú premennú, aby linker mohol prepojiť odkazy na príslušné entity.
Z vyššie uvedeného príkladu ,
Výsledok = 10;
C = „A“;
Toto sú platné definície.
Otázka č. 4) Komentár k lokálnemu a globálnemu rozsahu premennej.
Odpoveď: Rozsah premennej je definovaný ako rozsah programového kódu, v rámci ktorého zostáva premenná aktívna, t. J. Je možné ju deklarovať, definovať alebo s ňou pracovať.
V C ++ existujú dva typy rozsahu:
- Miestny rozsah: O premennej sa hovorí, že má lokálny rozsah alebo je lokálna, keď je deklarovaná vo vnútri bloku kódu. Premenná zostáva aktívna iba vo vnútri bloku a nie je prístupná mimo bloku kódu.
- Globálny rozsah: Premenná má globálny rozsah, ak je prístupná v celom programe. Globálna premenná je deklarovaná v hornej časti programu pred všetkými definíciami funkcií.
Príklad:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
Otázka č. 5) Aké je prednosť, keď sú v programe globálna premenná a lokálna premenná s rovnakým názvom?
Odpoveď: Kedykoľvek existuje lokálna premenná s rovnakým názvom ako globálna premenná, kompilátor dá prednosť miestnej premennej.
Príklad:
#include int globalVar = 2; int main() { int globalVar = 5; cout<Výstup z vyššie uvedeného kódu je 5. Je to tak preto, lebo hoci majú obe premenné rovnaký názov, kompilátor uprednostnil lokálny rozsah.
Otázka č. 6) Ako získate globálnu premennú a lokálnu premennú s rovnakým názvom?
Odpoveď: Ak existujú dve premenné s rovnakým názvom, ale s iným rozsahom, t. J. Jedna je lokálna premenná a druhá globálna, kompilátor dá prednosť miestnej premennej.
Na prístup k globálnej premennej používame „ operátor rozlíšenia rozsahu (: :) “. Pomocou tohto operátora môžeme získať prístup k hodnote globálnej premennej.
Príklad:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< Výkon:
Globálna premenná x = 10
lokálna premenná x = 2
Otázka č. 7) Koľko spôsobov je na inicializáciu int s konštantou?
Odpoveď: Existujú dva spôsoby:
- Prvý formát používa tradičnú notáciu C.
int výsledok = 10; - Druhý formát používa zápis konštruktora.
int výsledok (10);
Konštanty
Otázka č. 8) Čo je to konštanta? Vysvetlite na príklade.
Odpoveď: Konštanta je výraz, ktorý má pevnú hodnotu. Možno ich rozdeliť na celočíselné, desatinné, pohyblivé čiarky, znakové alebo reťazcové konštanty v závislosti od ich dátového typu.
Okrem desatinných C ++ podporuje aj ďalšie dve konštanty, tj. Osmičkové (do základu 8) a hexadecimálne (do základu 16) konštanty.
Príklady konštánt:
- 75 // celé číslo (desatinné)
- 0113 // osmičkový
- 0x4b // hexadecimálne
- 3,142 // pohyblivá čiarka
- ‘C’ // znaková konštanta
- „Hello, World“ // konštanta reťazca
Poznámka: Keď musíme predstavovať jeden znak, použijeme jednoduché úvodzovky a keď chceme definovať konštantu s viac ako jedným znakom, použijeme úvodzovky.
Otázka č. 9) Ako definujete / deklarujete konštanty v C ++?
Odpoveď: V C ++ môžeme definovať svoje vlastné konštanty pomocou # definovať preprocesorová smernica.
#define Hodnota identifikátora
Príklad:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< Výkon: Plocha kruhu = 78,55
Ako je uvedené vo vyššie uvedenom príklade, akonáhle definujeme konštantu pomocou smernice #define, môžeme ju použiť v celom programe a nahradiť jej hodnotu.
Môžeme deklarovať konštanty v C ++ pomocou „ konšt ”Kľúčové slovo. Tento spôsob je podobný ako pri deklarovaní premennej, ale s predponou const.
Príklady vyhlásenia konštanty
const int pi = 3,142;
const char c = „niečo“;
const PSČ = 411014;
Vo vyššie uvedených príkladoch, kedykoľvek nie je zadaný typ konštanty, kompilátor C ++ ju predvolene nastaví na celočíselný typ.
Operátorov
Otázka č. 10) Komentár k operátorovi priradenia v C ++.
Odpoveď: Operátor priradenia v C ++ sa používa na priradenie hodnoty inej premennej.
a = 5;
Tento riadok kódu priraďuje celočíselnú hodnotu 5 do premennej do .
Časť naľavo od operátora = je známa ako lhodnota (ľavá hodnota) a pravá ako rvalue (správna hodnota). Ľ hodnotu musí byť vždy premenná, zatiaľ čo pravá strana môže byť konštanta, premenná, výsledok operácie alebo ich ľubovoľná kombinácia.
Operácia priradenia sa vždy deje sprava doľava a nikdy nie naopak.
Jednou z vlastností, ktorú má C ++ oproti ostatným programovacím jazykom, je, že ako operátor je možné použiť operátor priradenia rvalue (alebo súčasť rvalue ) pre ďalšie zadanie.
Príklad:
a = 2 + (b = 5);
je ekvivalentné s:
b = 5;
a = 2 + b;
Čo znamená, najskôr priraďte 5 do premennej b a potom priradiť k do, hodnota dva plus výsledok predchádzajúceho výrazu b (to je 5), listy do s konečnou hodnotou 7 .
Nasledujúci výraz teda platí aj v C ++:
a = b = c = 5;
priradiť 5 k premenným do , b a c .
Otázka č. 11) Aký je rozdiel medzi rovná sa (==) a operátorovi priradenia (=)?
Odpoveď: V C ++ sú rovno (==) a operátor priradenia (=) dva úplne odlišné operátory.
Equal to (==) je relačný operátor rovnosti, ktorý vyhodnocuje dva výrazy a zisťuje, či sú rovnaké, a vracia true, ak sú rovnaké, a false, ak nie sú.
Operátor priradenia (=) sa používa na priradenie hodnoty premennej. Preto môžeme mať na vyhodnotenie komplexnú operáciu priradenia vo vnútri relačného operátora rovnosti.
Otázka č. 12) Aké sú rôzne aritmetické operátory v C ++?
Odpoveď: C ++ podporuje nasledujúce aritmetické operátory:
- + doplnenie
- - odčítanie
- * násobenie
- / divízia
- % modul
Ukážeme si rôzne aritmetické operátory pomocou nasledujúcej časti kódu.
Príklad:
#include int main () { int a=5, b=3; cout<<”a + b = “< Výkon :
a + b = 8
a - b = 2
a * b = 15
a / b = 2
a% b = 1
Ako je uvedené vyššie, všetky ostatné operácie sú priame a rovnaké ako skutočné aritmetické operácie, s výnimkou úplne iného operátora modulo. Operátor Modulo rozdeľuje a a b a výsledok operácie je zvyšok rozdelenia.
Otázka č. 13) Aké sú rôzne operátory priradenia zlúčenín v C ++?
Odpoveď: Nasledujú operátory priradenia zlúčenín v C ++:
+ =, - =, * =, / =,% =, >> =,<<=, &=, ^=,|=
Operátor združeného priradenia je jednou z najdôležitejších vlastností jazyka C ++, ktorá nám umožňuje meniť hodnotu premennej pomocou jedného zo základných operátorov:
Príklad:
value += increase; is equivalent to value = value + increase; if base_salary is a variable of type int. int base_salary = 1000; base_salary += 1000; #base_salary = base_salary + 1000 base_salary *= 5; #base_salary = base_salary * 5;
Otázka č. 14) Uveďte rozdiel medzi operáciami pred a po prírastku / znížení.
Odpoveď: C ++ umožňuje dvom operátorom, tj. ++ (inkrementovať) a - (dekrementovať), ktoré vám umožňujú pridať 1 k existujúcej hodnote premennej a od nej odčítať 1. Tieto operátory sa zase nazývajú prírastok (++) a dekrementácia (-).
Príklad:
a = 5;
a ++;
Druhý príkaz, ++, spôsobí, že 1 sa pridá k hodnote a. ++ je teda ekvivalent k
a = a + 1; alebo
a + = 1;
Jedinečnou vlastnosťou týchto operátorov je, že môžeme tieto operátory predponou alebo príponou premennej premeniť. Ak je teda a premenná a my prefixujeme operátor prírastku, bude to
++ a;
Toto sa nazýva predbežný prírastok. Podobne máme aj predbežné zníženie.
Ak pred premennú a vložíme operátor prírastku, budeme mať,
a ++;
Toto je dodatočný prírastok. Rovnako aj my máme post-decrement.
Rozdiel medzi významom pre a post závisí od toho, ako sa výraz vyhodnotí a výsledok sa uloží.
V prípade operátora predbežného prírastku / zníženia sa najskôr vykoná operácia prírastku / zníženia a potom sa výsledok odovzdá lvalue. Zatiaľ čo pre operácie po prírastku / znížení sa najskôr vyhodnotí hodnota l a potom sa podľa toho vykoná prírastok / zníženie.
Príklad:
a = 5; b = 6;
++ a; # a = 6
b–; # b = 6
–A; # a = 5
b ++; # 6
I / O cez konzolu
Otázka č. 15) Čo sú operátory extrakcie a vkladania v C ++? Vysvetlite na príkladoch.
Odpoveď: V knižnici iostream.h jazyka C ++ Čína a náklady sú dva dátové toky, ktoré sa používajú na vstup a výstup. Cout je zvyčajne smerovaný na obrazovku a cin je priradený ku klávesnici.
„Cin“ (operátor extrakcie): Použitím preťaženého operátora >> s streamom cin zvláda C ++ štandardný vstup.
int age; cin>>age;
Ako je uvedené v predchádzajúcom príklade, deklaruje sa celočíselná premenná „vek“, ktorá potom čaká na zadanie údajov pomocou klávesnice cin (klávesnica). “Cin” spracuje vstup iba po stlačení klávesu RETURN.
„Cout“ (operátor vkladania): Používa sa v spojení s preťažením<< operator. It directs the data that followed it into the cout stream.
Príklad:
súkromný server World of Warcraft Pvp
cout<<”Hello, World!”; cout<<123;
Riadiace štruktúry a funkcie
Riadiace štruktúry a slučky
Otázka 16) Aký je rozdiel medzi slučkou while a do while? Vysvetlite na príkladoch.
Odpoveď: Formát while cyklu v C ++ je:
While (výraz)
{Vyhlásenia;}
Blok príkazov pod while sa vykoná, pokiaľ je splnená podmienka v danom výraze.
Príklad:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<Vo vyššie uvedenom kóde bude slučka priamo vystupovať, ak n je 0. Teda v cykle while je koncová podmienka na začiatku slučky a ak je splnená, iterácie slučky sa nevykonajú.
Ďalej uvažujeme slučku do-while.
Všeobecný formát prestávky je:
do {statement;} while (podmienka);
Príklad:
#include int main() { int n; cout<>n; do { cout<Vo vyššie uvedenom kóde vidíme, že príkaz vo vnútri slučky sa vykoná aspoň raz, pretože podmienka slučky je na konci. Toto sú hlavné rozdiely medzi priebehom a časom dokončenia.
V prípade cyklu while môžeme zo začiatku cyklus priamo opustiť, ak podmienka nie je splnená, zatiaľ čo v cykle do-while vykonáme príkazy cyklu aspoň raz.
Funkcie
Otázka 17) Čo máte na mysli pod „neplatným“ návratovým typom?
Odpoveď: Všetky funkcie by mali vracať hodnotu podľa všeobecnej syntaxe.
Ak však nechceme, aby funkcia vrátila akúkoľvek hodnotu, použijeme „ neplatný ”, Aby ste to naznačili. To znamená, že používame „ neplatný „Na označenie, že funkcia nemá návratovú hodnotu alebo vracia„ neplatný “.
Príklad:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
Otázka č. 18) Vysvetlite prechod okolo hodnoty a prechod okolo referencie.
Odpoveď: Pri odovzdávaní parametrov funkcii pomocou funkcie „Pass by Value“ odovzdáme funkcii kópiu parametrov.
Preto akékoľvek úpravy parametrov volanej funkcie nie sú odovzdané späť volajúcej funkcii. Premenné vo volajúcej funkcii teda zostanú nezmenené.
Príklad:
void printFunc(int a,int b,int c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< Výkon:
x = 1
y = 3
z = 4
Ako je vidieť vyššie, aj keď boli parametre volanej funkcie zmenené, ich hodnoty sa vo volajúcej funkcii neodrazili, pretože boli odovzdané hodnotou.
Ak však chceme dostať zmenené hodnoty z funkcie späť do volajúcej funkcie, použijeme techniku „Pass by Reference“.
Aby sme to demonštrovali, upravujeme vyššie uvedený program nasledovne:
void printFunc(int& a,int& b,int& c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< Výkon:
x = 2
y = 6
z = 8
Ako je uvedené vyššie, úpravy vykonané v parametroch volaných funkcií sa odovzdajú volajúcej funkcii, keď použijeme techniku „Pass by reference“. Je to tak preto, lebo pomocou tejto techniky nezadáme kópiu parametrov, ale v skutočnosti odovzdáme samotný odkaz na premennú.
Otázka č. 19) Čo sú predvolené parametre? Ako sa hodnotia vo funkcii C ++?
Odpoveď: Predvolený parameter je hodnota, ktorá je priradená každému parametru pri deklarovaní funkcie.
Táto hodnota sa použije, ak je tento parameter pri volaní funkcie prázdny. Ak chcete určiť predvolenú hodnotu pre konkrétny parameter, jednoducho priraďte hodnotu parametru v deklarácii funkcie.
Ak hodnota nie je odovzdaná pre tento parameter počas volania funkcie, potom kompilátor použije poskytnutú predvolenú hodnotu. Ak je zadaná hodnota, potom sa nastaví táto predvolená hodnota a použije sa odovzdaná hodnota.
Príklad:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< Výkon:
12
6
Ako je uvedené vo vyššie uvedenom kóde, na znásobenie funkcie sú dve volania. Pri prvom volaní je odovzdaný iba jeden parameter s hodnotou. V takom prípade je druhým parametrom predvolená poskytnutá hodnota. Ale v druhom volaní, pretože sú odovzdané obidve hodnoty parametrov, predvolená hodnota je prepísaná a použije sa odovzdaná hodnota.
Otázka č. 20) Čo je to funkcia Inline v C ++?
Odpoveď: Inline funkcia je funkcia, ktorá je kompilovaná kompilátorom ako bod volania funkcie a v tomto bode je nahradený kód. Vďaka tomu je kompilácia rýchlejšia. Táto funkcia je definovaná predponou prototypu funkcie kľúčovým slovom „inline“.
Takéto funkcie sú výhodné, iba ak je kód vloženej funkcie malý a jednoduchý. Aj keď je funkcia definovaná ako vložená, je úplne závislá od prekladača, či ju vyhodnotí ako vloženú alebo nie.
Štruktúra pokročilých údajov
Polia
Otázka č. 21) Prečo sa polia zvyčajne spracovávajú pomocou cyklu for?
Odpoveď: Array používa index na prechádzanie každým z jeho prvkov.
Ak je A pole, potom ku každému jeho prvku je pristupované ako A (i). Programovo je na to potrebné len to, aby bol iteračný blok s premennou i slučky, ktorá slúži ako index (počítadlo) zvyšujúci sa od 0 do A.length-1.
To je presne to, čo robí slučka, a to je dôvod, prečo spracúvame polia pomocou for for loop.
Otázka č. 22) Uveďte rozdiel medzi odstránením a odstránením ().
Odpoveď: “Delete ()” sa používa na uvoľnenie pamäte pridelenej poľu, ktoré bolo pridelené pomocou new (). „Delete“ sa používa na uvoľnenie jedného bloku pamäte, ktorý bol pridelený pomocou new.
Otázka č. 23) Čo sa stalo s týmto kódom?
T * p = nový T (10);
vymazať p;
Odpoveď: Vyššie uvedený kód je syntakticky správny a bude v poriadku.
Jediným problémom je, že iba vymaže prvý prvok poľa. Aj keď je celé pole vymazané, bude sa volať iba deštruktor prvého prvku a uvoľní sa pamäť pre prvý prvok.
Otázka č. 24) V akom poradí sú zničené objekty v poli?
Odpoveď: Objekty v poli sú zničené v opačnom poradí konštrukcie: Prvý zostrojený, posledný zničený.
V nasledujúcom príklade, poradie pre deštruktory bude (9), a (8),…, a (1), a (0):
voiduserCode() { Car a(10); ... }
Ukazovatele
Otázka č. 25) Čo sa stalo s týmto kódom?
T * p = 0;
vymazať p;
Odpoveď: Vo vyššie uvedenom kóde je ukazovateľ nulový ukazovateľ. Podľa štandardu C ++ 03 je úplne platné volať príkaz delete na ukazovateľ NULL. Operátor mazania by sa vnútorne postaral o kontrolu NULL.
Otázka č. 26) Čo je referenčná premenná v C ++?
Odpoveď: Referenčná premenná je aliasový názov pre existujúcu premennú. To znamená, že názov premennej aj referenčná premenná smerujú na rovnaké miesto v pamäti. Preto vždy, keď je premenná aktualizovaná, je aktualizovaný aj odkaz.
Príklad:
int a=10; int& b = a;
Tu b je odkaz na a.
Triedy skladovania
Otázka č. 27) Čo je to trieda úložiska? Uveďte triedy úložiska v C ++.
Odpoveď: Trieda pamäte určuje životnosť alebo rozsah symbolov, ako sú premenné alebo funkcie.
C ++ podporuje nasledujúce triedy ukladacích priestorov:
- Auto
- Statický
- Vonkajšie
- Registrovať
- Premenlivé
Otázka č. 28) Vysvetlite špecifikátor triedy premenlivého úložného priestoru.
Odpoveď: Premennú člena objektu konštantnej triedy nie je možné zmeniť. Avšak vyhlásením premenných za „premenlivé“ môžeme hodnoty týchto premenných zmeniť.
Otázka č. 29) Na čo je kľúčové slovo auto?
Odpoveď: Štandardne je každá lokálna premenná funkcie automatická, t.j. auto . V nasledujúcej funkcii sú obidve premenné „i“ aj „j“ automatické premenné.
void f() { int i; auto int j; }
POZNÁMKA : Globálna premenná nie je automatická premenná.
Otázka 30) Čo je statická premenná?
Odpoveď: Statická premenná je lokálna premenná, ktorá si zachováva svoju hodnotu volania funkcií. Statické premenné sa deklarujú pomocou kľúčového slova „statický“. Numerické premenné, ktoré sú statické, majú predvolenú hodnotu nula.
Nasledujúca funkcia vytlačí 1 2 3, ak sa volá trikrát.
void f() { static int i; ++i; printf(“%d “,i); }
Ak je globálna premenná statická, potom je jej viditeľnosť obmedzená na ten istý zdrojový kód.
ako otvoriť súbor .bin v systéme Windows
Otázka č. 31) Aký je účel špecifikátora externého úložiska?
Odpoveď: Špecifikátor „Externý“ sa používa na vyriešenie rozsahu globálneho symbolu.
#include using nam espace std; main() { extern int i; cout< Vo vyššie uvedenom kóde môže byť „i“ viditeľné mimo súboru, kde je definované.
Otázka č. 32) Vysvetlite špecifikátor úložiska registra.
Odpoveď: Premenná „Register“ by sa mala použiť vždy, keď sa použije premenná. Keď je premenná deklarovaná so špecifikátorom „registra“, potom kompilátor dá CPU register na svoje uloženie, aby urýchlil vyhľadávanie premennej.
Otázka č. 33) Kedy použiť referenčné argumenty „const“ vo funkcii?
Odpoveď: Použitie referenčných argumentov „const“ vo funkcii je prospešné niekoľkými spôsobmi:
- Konštancia „const“ chráni pred programovacími chybami, ktoré by mohli zmeniť údaje.
- Výsledkom použitia výrazu „const“ je funkcia schopná spracovať skutočné aj konštantné argumenty konštantných aj nekonštantných, čo nie je možné, ak sa výraz „const“ nepoužije.
- Použitie odkazu na konštantu umožní funkcii vhodným spôsobom generovať a používať dočasnú premennú.
Štruktúra a typy údajov definované používateľom
Otázka č. 34) Čo je to trieda?
Odpoveď: Trieda je používateľom definovaný dátový typ v C ++. Môže byť vytvorený na riešenie konkrétneho druhu problému. Po vytvorení sa od používateľa nevyžaduje, aby poznal podrobnosti práce triedy.
Trieda vo všeobecnosti funguje ako návrh projektu a môže obsahovať rôzne parametre a funkcie alebo akcie pôsobiace na tieto parametre. Hovorí sa im členovia triedy.
Otázka č. 35) Rozdiel medzi triedou a štruktúrou.
Odpoveď:
Štruktúra: V jazyku C sa štruktúra používa na zoskupenie rôznych typov dátových typov. Premenné vo vnútri štruktúry sa nazývajú členovia štruktúry. Títo členovia sú predvolene verejní a dá sa k nim získať prístup pomocou názvu štruktúry, operátora bodiek a názvu člena.
Trieda: Class je nástupcom štruktúry. C ++ rozširuje definíciu štruktúry tak, aby zahŕňala funkcie, ktoré pracujú s jej členmi. Predvolene sú všetci členovia v triede súkromní.
Objektovo orientované programovanie v C ++
Triedy, konštruktéri, ničitelia
Otázka č. 36) Čo je to menný priestor?
Odpoveď: Namespace nám umožňuje zoskupiť skupinu globálnych tried, objektov a / alebo funkcií pod konkrétnym menom.
Všeobecná forma použitia menných priestorov je:
identifikátor menného priestoru {namespace-body}
Kde identifikátor je akýkoľvek platný identifikátor a telo menného priestoru je sada tried, objektov a funkcií, ktoré sú zahrnuté v mennom priestore. Menné priestory sú obzvlášť užitočné v prípade, že existuje možnosť, aby viac ako jeden objekt mal rovnaké meno, čo by mohlo viesť k stretom mien.
Otázka č. 37) Na čo sa používa vyhlásenie o „použití“?
Odpoveď: Použitie deklarácie sa používa na odkazovanie na meno z menného priestoru bez operátora rozlíšenia rozsahu.
Otázka č. 38) Čo je meno Mangling?
Odpoveď: Kompilátor C ++ kóduje typy parametrov pomocou funkcie / metódy do jedinečného názvu. Tento proces sa nazýva mangling názvu. Inverzný proces sa nazýva demangling.
Príklad:
A :: b (int, long) const je pozmenený ako „B__C3Ail“ .
Pre konštruktéra je názov metódy vynechaný.
To je A :: A (int, long) const je pozmenený ako „C3Ail“.
Otázka č. 39) Aký je rozdiel medzi objektom a triedou?
Odpoveď: Trieda je návrhom projektu alebo problému, ktorý sa má vyriešiť, a pozostáva z premenných a metód. Hovorí sa im členovia triedy. Nemôžeme samostatne pristupovať k metódam alebo premenným triedy, pokiaľ nie sú vyhlásené za statické.
Aby sme mali prístup k členom triedy a mohli ich používať, mali by sme vytvoriť inštanciu triedy, ktorá sa nazýva Object. Trieda má neobmedzenú životnosť, zatiaľ čo objekt má iba obmedzenú životnosť.
Otázka č. 40) Aké sú rôzne špecifikátory prístupu v C ++?
Odpoveď: C ++ podporuje nasledujúce špecifikátory prístupu:
- Verejné: Dátové členy a funkcie sú prístupné mimo triedy.
- Súkromné: Dátové členy a funkcie nie sú prístupné mimo triedy. Výnimkou je použitie triedy priateľov.
- Chránené: Dátové členy a funkcie sú prístupné iba odvodeným triedam.
Príklad:
Popíšte SÚKROMNÉ, CHRÁNENÉ a VEREJNÉ spolu s ich rozdielmi a uveďte príklady.
class A{ int x; int y; public int a; protected bool flag; public A() : x(0) , y(0) {} //default (no argument) constructor }; main(){ A MyObj; MyObj.x = 5; // Compiler will issue a ERROR as x is private int x = MyObj.x; // Compiler will issue a compile ERROR MyObj.x is private MyObj.a = 10; // no problem; a is public member int col = MyObj.a; // no problem MyObj.flag = true; // Compiler will issue a ERROR; protected values are read only bool isFlag = MyObj.flag; // no problem
Otázka č. 41) Čo je to konštruktor a ako sa volá?
Odpoveď: Konštruktor je členská funkcia triedy, ktorá má rovnaký názov ako trieda. Používa sa hlavne na inicializáciu členov triedy. Predvolene sú konštruktory verejné.
Existujú dva spôsoby, ako sa volajú konštruktory:
- Implicitne: Konštruktory implicitne volá kompilátor, keď sa vytvorí objekt triedy. Takto sa vytvorí objekt na zásobníku.
- Explicitné volanie: Keď sa objekt triedy vytvára pomocou nového, konštruktory sa volajú explicitne. Spravidla sa tak vytvorí objekt na halde.
Príklad:
class A{ int x; int y; public A() : x(0) , y(0) {} //default (no argument) constructor }; main() { A Myobj; // Implicit Constructor call. In order to allocate memory on stack, //the default constructor is implicitly called. A * pPoint = new A(); // Explicit Constructor call. In order to allocate //memory on HEAP we call the default constructor. }
Otázka č. 42) Čo je KOPÍROVACÍ KONŠTRUKTOR a kedy sa volá?
Odpoveď: Konštruktor kopírovania je konštruktor, ktorý prijíma objekt rovnakej triedy ako jeho parameter a kopíruje svoje dátové členy do objektu v ľavej časti priradenia. Je to užitočné, keď potrebujeme zostrojiť nový objekt rovnakej triedy.
Príklad:
class A{ int x; int y; public int color; public A() : x(0) , y(0) {} //default (no argument) constructor public A( const A& ) ; }; A::A( const A & p ) { this->x = p.x; this->y = p.y; this->color = p.color; } main() { A Myobj; Myobj.color = 345; A Anotherobj = A( Myobj ); // now Anotherobj has color = 345 }
Otázka 43) Čo je predvolený konštruktor?
Odpoveď: Predvolený konštruktor je konštruktor, ktorý buď nemá žiadne argumenty, alebo ak nejaké existujú, potom sú všetky predvolenými argumentmi.
Príklad:
class B { public: B (int m = 0) : n (m) {} int n; }; int main(int argc, char *argv()) { B b; return 0; }
Otázka 44) Čo je to konverzný konštruktor?
Odpoveď: Je to konštruktor, ktorý akceptuje jeden argument iného typu. Konverzné konštruktory sa používajú hlavne na prevod z jedného typu na druhý.
Otázka č. 45) Čo je to explicitný konštruktor?
Odpoveď: Konštruktor konverzie je deklarovaný pomocou explicitného kľúčového slova. Kompilátor nepoužíva explicitný konštruktor na implementáciu implicitnej konverzie typov. Jeho účel je vyhradený výslovne pre stavbu.
Otázka č. 46) Aká je úloha statického kľúčového slova pre premennú člena triedy?
Odpoveď: Statická premenná člena zdieľa spoločnú pamäť medzi všetkými objektmi vytvorenými pre príslušnú triedu. Na statickú členskú premennú nemusíme odkazovať pomocou objektu. Je však k nim prístup pomocou samotného názvu triedy.
Otázka č. 47) Vysvetlite funkciu statického člena.
Odpoveď: Statická členská funkcia má prístup iba k premennej statického člena triedy. Rovnako ako statické členské premenné, aj k statickej členskej funkcii je možné pristupovať pomocou názvu triedy.
Otázka č. 48) V akom poradí sú zničené miestne objekty?
Odpoveď: Zvážte nasledovanie časti kódu:
Class A{ …. }; int main() { A a; A b; ... }
V hlavnej funkcii máme vytvorené dva objekty jeden za druhým. Sú vytvorené v poradí, najskôr a potom b. Ale keď sú tieto objekty vymazané alebo ak vyjdú z rozsahu, bude sa destruktor pre každý z nich volať v opačnom poradí, v akom boli skonštruované.
Preto sa najskôr bude nazývať deštruktor b, potom a. Aj keby sme mali pole objektov, budú zničené rovnakým spôsobom v opačnom poradí, v akom boli vytvorené.
Preťaženie
Otázka 49) Vysvetlite preťaženie funkcií a preťaženie operátora.
Odpoveď: C ++ podporuje koncept OOPs Polymorfizmus, čo znamená „veľa podôb“.
V C ++ máme dva typy polymorfizmu, teda polymorfizmus v čase kompilácie a polymorfizmus za behu. Polymorfizmus v kompilácii sa dosahuje použitím techniky preťaženia. Preťaženie jednoducho znamená dať subjektu dodatočný význam tak, že jeho základný význam zostane nedotknutý.
C ++ podporuje dva typy preťaženia:
Preťaženie funkcií:
Preťaženie funkcií je technika, ktorá umožňuje programátorovi mať viac ako jednu funkciu s rovnakým názvom, ale s iným zoznamom parametrov. Inými slovami, funkciu preťažujeme rôznymi argumentmi, t. J. Typom argumentov, počtom argumentov alebo poradím argumentov.
Funkcia preťaženia sa nikdy nedosiahne na jej návratovom type.
Preťaženie operátora:
Toto je ďalší typ polymorfizmu kompilácie, ktorý podporuje C ++. Pri preťažení operátora je operátor preťažený, takže môže pracovať na používateľom definovaných typoch aj s operandami štandardného dátového typu. Štandardná definícia tohto operátora sa pritom zachová nedotknutá.
Napríklad, operátor Sčítanie (+), ktorý pracuje na numerických údajových typoch, môže byť preťažený, aby fungoval na dvoch objektoch rovnako ako na objekte triedy komplexných čísel.
Otázka 50) Aký je rozdiel medzi preťažením metódy a prepísaním metódy v C ++?
Odpoveď: Preťaženie metódy má funkcie s rovnakým názvom, ale s rôznymi zoznamami argumentov. Toto je forma kompromisného polymorfizmu.
Prepísanie metódy sa prejaví, keď prepíšeme metódu odvodenú od základnej triedy. Pri riešení polymorfizmu za behu alebo virtuálnych funkcií sa používa prepísanie metódy.
Otázka 51) Aký je rozdiel medzi kopírovacím konštruktorom a preťažením Operátor zadania?
Odpoveď: Konštruktor kópií a preťažený operátor priradenia slúžia v zásade na ten istý účel, t. J. Priraďovanie obsahu jedného objektu k druhému. Ale stále existuje rozdiel medzi týmito dvoma.
Príklad:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
Vo vyššie uvedenom príklade je druhý príkaz c1 = c2 preťaženým príkazom priradenia.
Tu c1 aj c2 sú už existujúcimi objektmi a obsah c2 je priradený k objektu c1. Preto pre príkaz preťaženého priradenia musia byť oba objekty už vytvorené.
Ďalej vyhlásenie, komplex c3 = c2 je príkladom konštruktora kopírovania. Tu je obsah c2 priradený novému objektu c3, čo znamená, že konštruktér kopírovania vytvorí nový objekt zakaždým, keď sa vykoná.
Otázka 52) Pomenujte operátorov, ktorých nemožno preťažiť.
Odpoveď:
- sizeof - operátor sizeof
- . - Dot operátor
- . * - operátor dereferencie
- -> - operátor dereferencie členov
- :: - operátor riešenia rozsahu
- ?: - podmienený operátor
Q # 53) Funkciu je možné preťažiť na základe parametra, ktorým je hodnota alebo referencia. Vysvetlite, či je tvrdenie pravdivé.
Odpoveď: Falošné. Obidve položky, Prechádzajúce hodnotou a Prechádzajúce referenciou, vyzerajú rovnako ako volajúci.
Otázka č. 54) Aké sú výhody preťaženia operátora?
Odpoveď: Preťažením štandardných operátorov v triede môžeme rozšíriť význam týchto operátorov, aby mohli operovať aj na iných používateľom definovaných objektoch.
Preťaženie funkcií nám umožňuje znížiť zložitosť kódu a urobiť ho prehľadnejším a čitateľnejším, pretože môžeme mať rovnaké názvy funkcií s rôznymi zoznamami argumentov.
Dedenie
Otázka č. 55) Čo je to dedičstvo?
Odpoveď: Dedenie je proces, pomocou ktorého môžeme získať vlastnosti existujúcej entity a vytvoriť novú entitu pridaním ďalších funkcií.
Pokiaľ ide o C ++, dedenie vytvára novú triedu odvodením z existujúcej triedy, takže táto nová trieda má vlastnosti svojej nadradenej triedy aj svoje vlastné.
Otázka č. 56) Aké sú výhody dedičstva?
Odpoveď: Dedičnosť umožňuje opätovné použitie kódu, čím šetrí čas pri vývoji kódu.
Dedením využívame vysokokvalitný softvér bez chýb, ktorý znižuje budúce problémy.
Otázka č. 57) Podporuje C ++ viacúrovňové a viacnásobné dedičstvá?
Odpoveď: Áno.
Otázka č. 58) Čo sú to viaceré dedičstvá (virtuálne dedičstvo)? Aké sú jeho výhody a nevýhody?
Odpoveď: Vo viacerých dedičstvách máme viac ako jednu základnú triedu, z ktorej môže dediť odvodená trieda. Odvodená trieda preto preberá vlastnosti a vlastnosti viac ako jednej základnej triedy.
Napríklad , trieda vodič bude mať dve základné triedy, a to, zamestnanec a osoba, pretože vodič je zamestnanec aj osoba. To je výhodné, pretože trieda vodičov môže dediť vlastnosti zamestnanca aj triedy osôb.
Ale v prípade zamestnanca a osoby bude mať trieda spoločné niektoré vlastnosti. Nastane však nejednoznačná situácia, pretože trieda vodičov nebude poznať triedy, z ktorých by sa mali spoločné vlastnosti dediť. Toto je hlavná nevýhoda viacerých dedičstiev.
Otázka č. 59) Vysvetlite vzťahy medzi triedami ISA a HASA. Ako by ste sa realizovali vy? každý?
Odpoveď: Vzťah „ISA“ zvyčajne vykazuje dedičnosť, pretože naznačuje, že trieda „ISA“ sa špecializuje na inú triedu. Napríklad , Zamestnanec ISA. To znamená, že trieda Employee sa dedí z triedy Person.
Na rozdiel od „ISA“ vzťah „HASA“ zobrazuje, že entita môže mať ako svojho člena inú entitu alebo že má trieda v sebe vložený iný objekt.
Takže keď vezmeme rovnaký príklad triedy Employee, spôsob, akým asociujeme triedu Salary so zamestnancom, nie je jej zdedením, ale zahrnutím alebo zahrnutím objektu Salary do triedy Employee. Vzťah „HASA“ sa najlepšie prejaví zadržaním alebo agregáciou.
Otázka č. 60) Dedí odvodená trieda alebo nededí?
Odpoveď: Keď je odvodená trieda zostavená z konkrétnej základnej triedy, v zásade dedí všetky funkcie a bežných členov základnej triedy. Z tohto pravidla však existujú určité výnimky. Napríklad odvodená trieda nezdedí konštruktory a deštruktory základnej triedy.
Každá trieda má svojich vlastných konštruktorov a deštruktorov. Odvodená trieda tiež nezdedí operátora priradenia základnej triedy a priateľov triedy. Dôvod je ten, že tieto entity sú špecifické pre konkrétnu triedu a ak je odvodená iná trieda alebo ak je priateľom tejto triedy, potom im nemožno odovzdať.
Polymorfizmus
Otázka 61) Čo je to polymorfizmus?
Odpoveď: Základná myšlienka polymorfizmu je v mnohých formách. V C ++ máme dva typy polymorfizmu:
(i) Polymorfizmus v čase kompilácie
V polymorfizme kompilácie dosiahneme preťažením mnoho podôb. Preto máme preťaženie operátora a preťaženie funkcií. (Týmto sme sa už zaoberali vyššie)
ii) Polymorfizmus za behu
Toto je polymorfizmus pre triedy a objekty. Všeobecná predstava je, že základnú triedu možno dediť niekoľkými triedami. Ukazovateľ základnej triedy môže ukazovať na svoju podradenú triedu a pole základnej triedy môže ukladať rôzne objekty podradenej triedy.
To znamená, že objekt reaguje odlišne na rovnaké volanie funkcie. Tento typ polymorfizmu môže využívať mechanizmus virtuálnych funkcií.
Otázka č. 62) Čo sú to virtuálne funkcie?
Odpoveď: Virtuálna funkcia umožňuje odvodeným triedam nahradiť implementáciu poskytovanú základnou triedou.
Kedykoľvek máme v základnej aj odvodenej triede funkcie s rovnakým názvom, pri pokuse o prístup k objektu podradenej triedy pomocou ukazovateľa základnej triedy vznikne nejasnosť. Pretože používame ukazovateľ základnej triedy, volaná funkcia je funkcia základnej triedy s rovnakým názvom.
Na opravu tejto nejednoznačnosti používame pred funkčným prototypom v základnej triede kľúčové slovo „virtual“. Inými slovami, túto polymorfnú funkciu robíme virtuálnou. Použitím funkcie Virtual môžeme odstrániť nejednoznačnosť a pomocou ukazovateľa základnej triedy môžeme správne získať prístup k všetkým funkciám podradenej triedy.
Otázka č. 63) Uveďte príklad polymorfizmu za behu / virtuálnych funkcií.
Odpoveď:
class SHAPE{ public virtual Draw() = 0; //abstract class with a pure virtual method }; class CIRCLE: public SHAPE{ public int r; public Draw() { this->drawCircle(0,0,r); } }; class SQUARE: public SHAPE{ public int a; public Draw() { this->drawSquare(0,0,a,a); } }; int main() { SHAPE shape1*; SHAPE shape2*; CIRCLE c1; SQUARE s1; shape1 = &c1; shape2 = &s1; coutVo vyššie uvedenom kóde má trieda SHAPE čisto virtuálnu funkciu a je to abstraktná trieda (nedá sa vytvoriť inštanciou). Každá trieda je odvodená z funkcie SHAPE implementujúca funkciu Draw () vlastným spôsobom.
Ďalej je každá funkcia Draw virtuálna, takže keď použijeme vždy ukazovateľ základnej triedy (SHAPE) s objektom odvodených tried (Circle a SQUARE), potom sa vyvolajú príslušné funkcie Draw.
Otázka č. 64) Čo máte na mysli pod pojmom Pure Virtual Functions?
Odpoveď: Čistá virtuálna členská funkcia je členská funkcia, v ktorej základná trieda núti odvodené triedy prepísať. Táto členská funkcia zvyčajne nemá implementáciu. Čisté virtuálne funkcie sa rovnajú nule.
Príklad:
class Shape { public: virtual void draw() = 0; };
Základnú triedu, ktorá má ako člena čisto virtuálnu funkciu, možno označiť ako „abstraktnú triedu“. Túto triedu nie je možné vytvoriť inštanciou a zvyčajne funguje ako plán, ktorý má niekoľko podtried s ďalšou implementáciou.
Otázka č. 65) Čo sú to virtuálni konštruktéri / deštruktori?
Odpoveď:
Virtuálne ničitelia: Keď použijeme ukazovateľ základnej triedy ukazujúci na objekt odvodenej triedy a pomocou ktorého ho zničíme, potom sa namiesto volania deštruktora odvodenej triedy zavolá deštruktor základnej triedy.
Príklad:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Ako je uvedené vo vyššie uvedenom príklade, keď povieme odstránenie, zavolá sa deštruktor, ale v skutočnosti ide o deštruktor základnej triedy. To vedie k nejednoznačnosti, že všetka pamäť, ktorá je v pamäti b, nebude správne vymazaná.
Tento problém je možné vyriešiť použitím konceptu „Virtual Destructor“.
Čo urobíme, urobíme konštruktor základnej triedy „Virtuálny“, aby sa virtuálne stali aj všetky deštruktory podradenej triedy, a keď odstránime objekt základnej triedy ukazujúci na objekt odvodenej triedy, zavolá sa príslušný deštruktor a všetky objekty sú správne vymazané.
Toto sa zobrazuje nasledovne:
čo je spúšťanie portov vs presmerovanie portov
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Virtuálny staviteľ : Konštruktory nemôžu byť virtuálne. Deklarácia konštruktora ako virtuálnej funkcie je syntaktická chyba.
Kamarát
Otázka č. 66) Čo je funkcia priateľa?
Odpoveď: Trieda C ++ neumožňuje prístup k jej súkromným a chráneným členom mimo triedy. Toto pravidlo však možno porušiť použitím „ Kamarát ”.
Ako už samotný názov napovedá, priateľská funkcia je externá funkcia, ktorá je priateľom triedy. Aby funkcia priateľa mala prístup k súkromným a chráneným metódam triedy, mali by sme mať v triede prototyp funkcie priateľa s kľúčovým slovom „friend“.
Otázka 67) Čo je to trieda priateľov?
Odpoveď: Triedy priateľov sa používajú, keď potrebujeme prepísať pravidlo pre špecifikátory súkromného a chráneného prístupu, aby dve triedy mohli navzájom úzko spolupracovať.
Preto môžeme mať triedu priateľov, aby sme boli priateľmi inej triedy. Takto môžu triedy priateľov udržiavať súkromné neprístupné veci tak, ako sú.
Keď máme požiadavku na prístup k internej implementácii triedy (súkromný člen) bez zverejnenia podrobností zverejnením, ideme na funkcie priateľa.
Pokročilý C ++
Šablóny
Otázka 68) Čo je to šablóna?
Odpoveď: Šablóny umožňujú vytváranie funkcií, ktoré sú nezávislé od dátového typu (všeobecné) a môžu brať akýkoľvek dátový typ ako parametre a návratovú hodnotu bez nutnosti preťaženia funkcie všetkými možnými dátovými typmi. Šablóny takmer plnia funkčnosť makra.
Jeho prototyp je ktorýkoľvek z nasledujúcich:
šablóna identifikovať > function_declaration;
šablóna identifikovať > function_declaration;
Jediným rozdielom medzi oboma prototypmi je použitie triedy kľúčového slova alebo typu. Ich základná funkčnosť všeobecnej povahy zostáva rovnaká.
Spracovanie výnimiek
Otázka č. 69) Čo je spracovanie výnimiek? Podporuje C ++ spracovanie výnimiek?
Odpoveď: Áno, C ++ podporuje spracovanie výnimiek.
Nemôžeme zaistiť, aby sa kód vždy spustil normálne. Môžu nastať určité situácie, ktoré môžu vynútiť poruchu nami napísaného kódu, aj keď je bezchybný. Toto zlyhanie kódu sa nazýva Výnimka .
Keď dôjde k výnimke, musí ju kompilátor vyhodiť, aby sme vedeli, že k výnimke došlo. Po vyvolaní výnimky musí kompilátor zabezpečiť, aby sa s ňou zaobchádzalo správne, aby tok programu pokračoval alebo aby sa správne ukončil. Toto sa nazýva vybavovanie výnimky.
V C ++ teda máme tri kľúčové slová, t.j. skús , hodiť a chytiť ktoré sú vo výnimočných prípadoch.
Všeobecná syntax pre blok výnimiek je:
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
Ako je uvedené vyššie, kód, ktorý by mohol potenciálne zlyhať, sa vloží do bloku try. Pri nesprávnom fungovaní kódu sa vyvolá výnimka. Táto výnimka sa potom zachytí pod blokom zachytávania a zaobchádza sa s ňou, tj. Sú podniknuté príslušné kroky.
Otázka č. 70) Komentovať štandardné výnimky v C ++?
Odpoveď: C ++ podporuje niektoré štandardné výnimky, ktoré sa dajú zachytiť, ak vložíme kód do bloku try. Tieto výnimky sú súčasťou základnej triedy “ std :: výnimka ”. Táto trieda je definovaná v hlavičkovom súbore C ++.
Niekoľko príkladov výnimiek podporovaných touto triedou obsahuje:
bad_alloc - vyhodené „novým“
runtime_error - vyvolané pre chyby za behu
bad_typeid - vyhodené podľa typu id
Úvod do štandardnej knižnice šablón
Otázka č. 71) Čo je štandardná knižnica šablón (STL)? Aké sú rôzne typy kontajnerov STL?
Odpoveď: Knižnica štandardných šablón (STL) je knižnica šablón kontajnerov schválená výborom ANSI na zahrnutie do štandardnej špecifikácie C ++. Máme rôzne typy kontajnerov STL podľa toho, ako ukladajú prvky.
- Fronta, zásobník - Sú rovnaké ako tradičné fronty a stohy a nazývajú sa adaptívne kontajnery.
- Nastaviť, Mapa - Jedná sa v podstate o kontajnery, ktoré majú páry kľúč / hodnota a majú asociatívnu povahu.
- Vektor a - Majú sekvenčnú povahu a majú podobnosť s poľami.
Otázka č. 72) Čo je to trieda Iterator?
Odpoveď: V C ++ je trieda kontajnera kolekcia rôznych objektov.
Ak potrebujeme prechádzať touto zbierkou objektov, nemôžeme to urobiť pomocou jednoduchých premenných indexu. Preto máme v STK špeciálnu triedu nazvanú Iterátor triedy, pomocou ktorej je možné prechádzať obsahom triedy kontajnera.
Zahŕňajú rôzne kategórie iterátorov vstupné iterátory, výstupné iterátory, dopredné iterátory, obojsmerné iterátory, náhodný prístup atď.
Otázka č. 73) Aký je rozdiel medzi externým iterátorom a interným iterátorom? Popíšte výhodu externého iterátora.
Odpoveď: Interný iterátor je implementovaný s členskými funkciami triedy, ktorá má položky na prechádzanie.
Externý iterátor je implementovaný ako samostatná trieda, ktorá môže byť viazaná na objekt, ktorý má položky na prechod. Základnou výhodou externého iterátora je, že je ľahké ho implementovať, pretože je implementovaný ako samostatná trieda.
Po druhé, keďže ide o inú triedu, veľa iteračných objektov môže byť aktívnych súčasne.
Ďalšie čítanie => C # Dotaz na rozhovor
Záver
Tento článok obsahuje takmer všetky hlavné témy týkajúce sa programovania a programovania.
Dúfame, že sa ktorýkoľvek kandidát po príprave na pohovor pomocou tejto série otázok z pohovoru bude cítiť uvoľnene.
Všetko najlepšie pre váš rozhovor !!
Odporúčané čítanie
- Dotazy a odpovede na pohovor
- ETL Testovacie otázky a odpovede na pohovor
- Niektoré zložité otázky a odpovede na ručné testovanie
- 25 najlepších otázok a odpovedí na agilné testovacie pohovory
- Spock Interview Otázky s odpoveďami (najobľúbenejšie)
- Niektoré zaujímavé otázky týkajúce sa testovania softvéru
- Top 20+ .NET Interview otázok a odpovedí
- Top 32 najlepších otázok a odpovedí na rozhovor o údajoch