top 70 c interview questions
Nejčastěji kladené základní a pokročilé dotazy k rozhovorům v C ++ s příklady kódu pro kandidáty na základní úrovni i zkušené profesionály:
Tento podrobný článek bude jistě záložkou pro ty, kteří se připravují na rozhovor v C ++.
Téměř všechna hlavní témata v C ++ jsou zde zahrnuta spolu s některými základními otázkami k pokročilým tématům, jako je Standard Template Library (STL) atd.
Tato sada otázek ohledně kódování C ++ vám pomůže sebevědomě čelit jakýmkoli pohovorům v C ++ a na první pokus jej úspěšně vyčistit.
Co se naučíte:
- Dotazy na rozhovor v C ++ s příklady kódu
Dotazy na rozhovor v C ++ s příklady kódu
Níže jsou uvedeny nejoblíbenější dotazy k rozhovorům o programování v C ++, na které odpovídá odborník na C ++.
Přečtěte si také => Nejčastější dotazy k programování v programu C
Základní C ++
Struktura programu C ++
Otázka č. 1) Jaká je základní struktura programu C ++?
Odpovědět: Níže je uvedena základní struktura programu C ++:
#include int main() { cout<<”Hello,World!”; return 0; }
První řádek, který začíná „ # ' je směrnice o preprocesoru . V tomto případě používáme zahrnout jako směrnice, která říká kompilátoru, aby zahrnoval záhlaví, zatímco “ iostream.h ”, Které budou použity pro základní vstup / výstup později v programu.
Další řádek je funkce „main“, která vrací celé číslo. Hlavní funkce je výchozím bodem provedení pro jakýkoli program v C ++. Bez ohledu na jeho pozici v souboru zdrojového kódu je obsah hlavní funkce vždy proveden nejprve kompilátorem C ++.
Na dalším řádku vidíme otevřené složené závorky, které označují začátek bloku kódu. Poté vidíme programovací instrukci nebo řádek kódu, který používá počet, který je standardním výstupním proudem (jeho definice je obsažena v iostream.h).
Tento výstupní proud má řetězec znaků a tiskne jej na standardní výstupní zařízení. V tomto případě je to „Hello, World!“. Vezměte prosím na vědomí, že každá instrukce C ++ končí středníkem (;), který je velmi nutný a jeho vynechání bude mít za následek chyby kompilace.
Před zavřením složených závorek} vidíme další řádek „return 0;“. Toto je návratový bod k hlavní funkci.
Každý program v C ++ bude mít základní strukturu, jak je ukázáno výše, s direktivou preprocesoru, deklarací hlavní funkce následovanou blokem kódu a poté návratovým bodem k hlavní funkci, která označuje úspěšné provedení programu.
Otázka č. 2) Jaké jsou komentáře v C ++?
Odpovědět: Komentáře v C ++ jsou jednoduše částí zdrojového kódu ignorovaného kompilátorem. Pomáhají pouze programátorovi přidat popis nebo další informace o zdrojovém kódu.
V C ++ existují dva způsoby, jak přidat komentáře:
- // jednořádkový komentář
- / * blokovat komentář * /
První typ zahodí vše poté, co překladač narazí na „//“. V druhém typu kompilátor zahodí vše mezi „/ *“ a „* /“.
Proměnné, datové typy a konstanty
Otázka č. 3) Rozdíl mezi deklarací a definicí proměnné.
Odpovědět: Deklarace proměnné pouze specifikuje datový typ proměnné a název proměnné. V důsledku deklarace řekneme kompilátoru, aby rezervoval místo pro proměnnou v paměti podle zadaného datového typu.
Příklad:
int Result; char c; int a,b,c;
Všechny výše uvedené jsou platná prohlášení. Všimněte si také, že v důsledku deklarace není hodnota proměnné určena.
Zatímco definice je implementace / vytvoření instance deklarované proměnné, kde spojíme příslušnou hodnotu s deklarovanou proměnnou, aby linker mohl propojit odkazy na příslušné entity.
Z výše uvedeného příkladu ,
Výsledek = 10;
C = „A“;
Toto jsou platné definice.
Otázka č. 4) Komentář k místnímu a globálnímu rozsahu proměnné.
Odpovědět: Rozsah proměnné je definován jako rozsah programového kódu, ve kterém proměnná zůstává aktivní, tj. Může být deklarována, definována nebo se s ní může pracovat.
V C ++ existují dva typy oboru:
- Místní rozsah: O proměnné se říká, že má místní rozsah nebo je místní, když je deklarována uvnitř bloku kódu. Proměnná zůstává aktivní pouze uvnitř bloku a není přístupná mimo blok kódu.
- Globální rozsah: Proměnná má globální rozsah, pokud je přístupná v celém programu. Globální proměnná je deklarována v horní části programu před všemi definicemi funkcí.
Příklad:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
Otázka č. 5) Jaká je přednost, když jsou v programu se stejným názvem globální proměnná a místní proměnná?
Odpovědět: Kdykoli existuje místní proměnná se stejným názvem jako globální proměnná, dává kompilátor přednost místní proměnné.
Příklad:
#include int globalVar = 2; int main() { int globalVar = 5; cout<Výstup výše uvedeného kódu je 5. Je to proto, že i když obě proměnné mají stejný název, překladač dal přednost místnímu rozsahu.
Otázka č. 6) Jak se dostanete ke globální proměnné, když existují globální proměnná a místní proměnná se stejným názvem?
Odpovědět: Pokud existují dvě proměnné se stejným názvem, ale odlišným rozsahem, tj. Jedna je lokální proměnná a druhá globální proměnná, kompilátor dá přednost místní proměnné.
Pro přístup k globální proměnné používáme „ operátor rozlišení oboru (: :) “. Pomocí tohoto operátoru můžeme přistupovat k hodnotě globální proměnné.
Příklad:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< Výstup:
Globální proměnná x = 10
lokální proměnná x = 2
Otázka č. 7) Kolik způsobů existuje k inicializaci int pomocí konstanty?
Odpovědět: Existují dva způsoby:
- První formát používá tradiční C notaci.
int výsledek = 10; - Druhý formát používá zápis konstruktoru.
int výsledek (10);
Konstanty
Otázka č. 8) Co je to konstanta? Vysvětlete to na příkladu.
Odpovědět: Konstanta je výraz, který má pevnou hodnotu. Lze je rozdělit na celočíselné, desetinné, plovoucí desetinnou čárku, znakové nebo řetězcové konstanty v závislosti na jejich datovém typu.
Kromě desítkové soustavy podporuje C ++ také další dvě konstanty, tj. Osmičkové (do základny 8) a hexadecimální (do základny 16) konstanty.
Příklady konstant:
- 75 // celé číslo (desítkově)
- 0113 // osmičkový
- 0x4b // hexadecimální
- 3.142 // s plovoucí desetinnou čárkou
- „C“ // znaková konstanta
- „Hello, World“ // řetězcová konstanta
Poznámka: Když musíme představovat jeden znak, použijeme jednoduché uvozovky a když chceme definovat konstantu s více než jedním znakem, použijeme uvozovky.
Otázka č. 9) Jak definujete / deklarujete konstanty v C ++?
Odpovědět: V C ++ můžeme definovat vlastní konstanty pomocí #definovat směrnice o preprocesoru.
#define Hodnota identifikátoru
Příklad:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< Výstup: Plocha kruhu = 78,55
Jak ukazuje výše uvedený příklad, jakmile definujeme konstantu pomocí direktivy #define, můžeme ji použít v celém programu a nahradit její hodnotu.
Můžeme deklarovat konstanty v C ++ pomocí „ konst ”Klíčové slovo. Tento způsob je podobný deklaraci proměnné, ale s předponou const.
Příklady deklarace konstanty
const int pi = 3,142;
const char c = „něco“;
const PSČ = 411014;
Ve výše uvedených příkladech, kdykoli není zadán typ konstanty, kompilátor C ++ jej implicitně nastaví na celočíselný typ.
Operátoři
Otázka č. 10) Komentář k operátorovi přiřazení v C ++.
Odpovědět: Operátor přiřazení v C ++ se používá k přiřazení hodnoty jiné proměnné.
a = 5;
Tento řádek kódu přiřadí celočíselnou hodnotu 5 do proměnné na .
Část nalevo od operátoru = je známá jako lhodnota (levá hodnota) a pravá jako rvalue (správná hodnota). L hodnota vždy musí být proměnná, zatímco pravá strana může být konstanta, proměnná, výsledek operace nebo jakákoli jejich kombinace.
Operace přiřazení probíhá vždy zprava doleva a nikdy obráceně.
Jedna vlastnost, kterou má C ++ oproti ostatním programovacím jazykům, je to, že operátor přiřazení lze použít jako rvalue (nebo část rvalue ) pro další úkol.
Příklad:
a = 2 + (b = 5);
odpovídá:
b = 5;
a = 2 + b;
Což znamená, nejprve přiřadit 5 do proměnné b a poté přiřadit k na, hodnota dva plus výsledek předchozího výrazu b (to je 5), listy na s konečnou hodnotou 7 .
Následující výraz tedy platí i v C ++:
a = b = c = 5;
přiřadit 5 proměnným na , b a C .
Otázka č. 11) Jaký je rozdíl mezi rovná (==) a operátor přiřazení (=)?
Odpovědět: V C ++ jsou rovno (==) a operátor přiřazení (=) dva zcela odlišné operátory.
Equal to (==) je relační operátor rovnosti, který vyhodnotí dva výrazy, aby zjistil, zda jsou stejné, a vrátí true, pokud jsou stejné, a false, pokud nejsou.
Operátor přiřazení (=) se používá k přiřazení hodnoty proměnné. Proto můžeme mít pro vyhodnocení operaci komplexního přiřazení uvnitř relačního operátoru rovnosti.
Otázka č. 12) Jaké jsou různé aritmetické operátory v C ++?
Odpověď: C ++ podporuje následující aritmetické operátory:
- + doplněk
- - odčítání
- * násobení
- / divize
- % modul
Ukážeme si různé aritmetické operátory pomocí následujícího kódu.
Příklad:
#include int main () { int a=5, b=3; cout<<”a + b = “< Výstup :
a + b = 8
a - b = 2
a * b = 15
a / b = 2
a% b = 1
Jak je uvedeno výše, všechny ostatní operace jsou přímé a stejné jako skutečné aritmetické operace, kromě operátoru modulo, který je zcela odlišný. Operátor Modulo dělí a a b a výsledek operace je zbytek dělení.
Otázka č. 13) Jaké jsou různé operátory přiřazení sloučenin v C ++?
Odpovědět: Následují operátory přiřazení sloučenin v C ++:
+ =, - =, * =, / =,% =, >> =,<<=, &=, ^=,|=
Operátor přiřazení sloučenin je jednou z nejdůležitějších funkcí jazyka C ++, která nám umožňuje změnit hodnotu proměnné pomocí jednoho ze základních operátorů:
Pří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 rozdíl mezi operacemi před a po přírůstku / snížení.
Odpovědět: C ++ umožňuje dvěma operátorům, tj. ++ (přírůstek) a - (dekrement), které vám umožňují přidat 1 k existující hodnotě proměnné a odečíst 1 od proměnné. Tito operátoři se zase nazývají inkrement (++) a dekrement (-).
Příklad:
a = 5;
a ++;
Druhý příkaz, ++, způsobí, že 1 bude přidán k hodnotě a. A ++ je tedy ekvivalentní s
a = a + 1; nebo
a + = 1;
Unikátní vlastností těchto operátorů je, že můžeme tyto operátory předponou nebo příponou s proměnnou. Proto, pokud a je proměnná a my předponu operátor přírůstku to bude
++ a;
Tomu se říká přírůstek. Podobně máme také předběžné snížení.
Pokud před proměnnou a přidáme operátor přírůstku, budeme mít,
a ++;
Toto je přírůstek. Podobně máme také post-dekrementaci.
Rozdíl mezi významem pre a post závisí na tom, jak je výraz vyhodnocen a výsledek uložen.
V případě operátoru pre-increment / decrement se nejprve provede operace increment / decrement a poté se výsledek předá lvalue. Zatímco u operací po zvýšení / snížení se nejprve vyhodnotí hodnota l a poté se odpovídajícím způsobem provede přírůstek / snížení.
Příklad:
a = 5; b = 6;
++ a; # a = 6
b–; # b = 6
-A; # a = 5
b ++; # 6
I / O prostřednictvím konzoly
Otázka č. 15) Co jsou operátory Extrakce a Vložení v C ++? Vysvětlete příklady.
Odpovědět: V knihovně iostream.h C ++ Čína , a náklady jsou dva datové toky, které se používají pro vstup a výstup. Cout je obvykle směrován na obrazovku a cin je přiřazen klávesnici.
„Cin“ (operátor extrakce): Použitím přetíženého operátoru >> s cin streamem C ++ zpracovává standardní vstup.
int age; cin>>age;
Jak je znázorněno ve výše uvedeném příkladu, deklaruje se celočíselná proměnná „age“, která poté čeká na zadání dat pomocí klávesnice (klávesnice). „Cin“ zpracuje vstup pouze po stisknutí klávesy RETURN.
„Cout“ (operátor vkládání): Používá se ve spojení s přetížením<< operator. It directs the data that followed it into the cout stream.
Příklad:
software pro stahování videa z youtube pro PC
cout<<”Hello, World!”; cout<<123;
Řídicí struktury a funkce
Řídicí struktury a smyčky
Otázka č. 16) Jaký je rozdíl mezi smyčkou while a do while? Vysvětlete příklady.
Odpovědět: Formát while smyčky v C ++ je:
While (výraz)
{prohlášení;}
Blok příkazů pod while je spuštěn, pokud je podmínka v daném výrazu pravdivá.
Příklad:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<Ve výše uvedeném kódu smyčka přímo skončí, pokud n je 0. Tedy ve smyčce while je podmínka ukončení na začátku smyčky a pokud je splněna, neprovádějí se žádné iterace smyčky.
Dále uvažujeme smyčku do-while.
Obecný formát do-while je:
do {statement;} while (podmínka);
Příklad:
#include int main() { int n; cout<>n; do { cout<Ve výše uvedeném kódu vidíme, že příkaz uvnitř smyčky je proveden alespoň jednou, protože podmínka smyčky je na konci. To jsou hlavní rozdíly mezi while a do-while.
V případě smyčky while můžeme smyčku na začátku přímo opustit, pokud podmínka není splněna, zatímco ve smyčce do-while provedeme příkazy smyčky alespoň jednou.
Funkce
Otázka č. 17) Co máte na mysli pod „neplatným“ návratovým typem?
Odpovědět: Všechny funkce by měly vracet hodnotu podle obecné syntaxe.
Pokud však nechceme, aby funkce vrátila jakoukoli hodnotu, použijeme „ prázdnota “K označení toho. To znamená, že používáme „ prázdnota „K označení, že funkce nemá žádnou návratovou hodnotu nebo vrací“ prázdnota “.
Příklad:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
Otázka č. 18) Vysvětlete Pass by Value a Pass by Reference.
Odpovědět: Při předávání parametrů funkci pomocí funkce „Pass by Value“ předáváme funkci kopii parametrů.
Proto jakékoli úpravy parametrů volané funkce nejsou předány zpět volající funkci. Proměnné ve volající funkci tedy zůstanou nezměněny.
Pří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ýstup:
x = 1
y = 3
z = 4
Jak je vidět výše, ačkoli byly parametry změněny ve volané funkci, jejich hodnoty se neprojevily ve volající funkci, protože byly předány hodnotou.
Pokud však chceme získat změněné hodnoty z funkce zpět do volající funkce, použijeme techniku „Pass by Reference“.
Abychom to dokázali, upravíme výše uvedený program následujícím způsobem:
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ýstup:
x = 2
y = 6
z = 8
Jak je uvedeno výše, úpravy provedené v parametrech volaných funkcí jsou předány volající funkci, když použijeme techniku „Pass by reference“. Důvodem je, že pomocí této techniky nepředáváme kopii parametrů, ale ve skutečnosti předáváme samotnou referenci proměnné.
Otázka č. 19) Co jsou výchozí parametry? Jak jsou hodnoceny ve funkci C ++?
Odpovědět: Výchozí parametr je hodnota, která je přiřazena každému parametru při deklaraci funkce.
Tato hodnota se použije, pokud při volání funkce zůstane tento parametr prázdný. Chcete-li určit výchozí hodnotu pro konkrétní parametr, jednoduše přiřadíme hodnotu parametru v deklaraci funkce.
Pokud hodnota není předána pro tento parametr během volání funkce, kompilátor použije poskytnutou výchozí hodnotu. Pokud je zadána hodnota, pak se na tuto výchozí hodnotu zašlápne a použije se předaná hodnota.
Příklad:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< Výstup:
12
6
Jak je znázorněno ve výše uvedeném kódu, existují dvě volání k znásobení funkce. V prvním volání je předán pouze jeden parametr s hodnotou. V tomto případě je jako výchozí hodnota uveden druhý parametr. Ale při druhém volání, protože jsou předány obě hodnoty parametrů, je přepsána výchozí hodnota a je použita předaná hodnota.
Otázka č. 20) Co je to funkce Inline v C ++?
Odpovědět: Inline funkce je funkce, která je kompilována kompilátorem jako bod volání funkce a v tomto bodě je kód nahrazen. Díky tomu je kompilace rychlejší. Tato funkce je definována předponou prototypu funkce klíčovým slovem „inline“.
Takové funkce jsou výhodné pouze v případě, že je kód vložené funkce malý a jednoduchý. Ačkoli je funkce definována jako vložená, je zcela závislá na kompilátoru, aby ji vyhodnotila jako vloženou nebo ne.
Struktura pokročilých dat
Pole
Otázka č. 21) Proč se pole obvykle zpracovávají pomocí smyčky for?
Odpovědět: Array používá index k procházení každého ze svých prvků.
Pokud A je pole, pak ke každému jeho prvku je přistupováno jako A (i). Programově je k tomu zapotřebí pouze iterativní blok s proměnnou smyčky i, která slouží jako index (čítač) zvyšující se od 0 do A.length-1.
To je přesně to, co smyčka dělá, a to je důvod, proč zpracováváme pole pomocí pro smyčky.
Otázka č. 22) Uveďte rozdíl mezi odstraněním a odstraněním ().
Odpovědět: „Delete ()“ se používá k uvolnění paměti přidělené poli, které bylo přiděleno pomocí new (). „Vymazat“ se používá k uvolnění jednoho bloku paměti, který byl přidělen pomocí nového.
Otázka č. 23) Co se děje s tímto kódem?
T * p = nový T (10);
smazat p;
Odpovědět: Výše uvedený kód je syntakticky správný a bude kompilován v pořádku.
Jediným problémem je, že pouze odstraní první prvek pole. I když je odstraněno celé pole, bude volán pouze destruktor prvního prvku a uvolní se paměť pro první prvek.
Otázka č. 24) Jaké je pořadí, ve kterém jsou objekty v poli zničeny?
Odpovědět: Objekty v poli jsou zničeny v opačném pořadí konstrukce: Nejprve vytvořené, naposledy zničené.
V následujícím příkladu, pořadí pro destruktory bude (9), a (8),…, a (1), a (0):
voiduserCode() { Car a(10); ... }
Ukazatele
Otázka č. 25) Co se stalo s tímto kódem?
T * p = 0;
smazat p;
Odpovědět: Ve výše uvedeném kódu je ukazatel nulovým ukazatelem. Podle standardu C ++ 03 je naprosto platné volat delete na ukazatel NULL. Operátor odstranění by se interně postaral o kontrolu NULL.
Otázka č. 26) Co je referenční proměnná v C ++?
Odpovědět: Referenční proměnná je aliasový název pro existující proměnnou. To znamená, že jak název proměnné, tak referenční proměnná ukazují na stejné místo v paměti. Proto, kdykoli je proměnná aktualizována, je aktualizován také odkaz.
Příklad:
int a=10; int& b = a;
Zde b je odkaz na a.
Třídy skladování
Otázka č. 27) Co je to třída úložiště? Uveďte třídy úložiště v C ++.
Odpovědět: Třída úložiště určuje životnost nebo rozsah symbolů, jako jsou proměnné nebo funkce.
C ++ podporuje následující třídy úložiště:
- Auto
- Statický
- Externí
- Registrovat
- Proměnlivý
Otázka č. 28) Vysvětlete specifikátor třídy měnitelného úložiště.
Odpovědět: Proměnnou člena objektu konstantní třídy nelze změnit. Deklarováním proměnných jako „proměnlivých“ však můžeme hodnoty těchto proměnných změnit.
Otázka č. 29) K čemu je klíčové slovo auto?
Odpovědět: Ve výchozím nastavení je každá lokální proměnná funkce automatická, tj. auto . V níže uvedené funkci jsou proměnné „i“ a „j“ automatické proměnné.
void f() { int i; auto int j; }
POZNÁMKA : Globální proměnná není automatická proměnná.
Otázka 30) Co je statická proměnná?
Odpovědět: Statická proměnná je místní proměnná, která si zachovává svoji hodnotu napříč voláními funkcí. Statické proměnné jsou deklarovány pomocí klíčového slova „static“. Numerické proměnné, které jsou statické, mají výchozí hodnotu nula.
Následující funkce vytiskne 1 2 3, pokud je volána třikrát.
void f() { static int i; ++i; printf(“%d “,i); }
Pokud je globální proměnná statická, je její viditelnost omezena na stejný zdrojový kód.
Otázka č. 31) Jaký je účel specifikátoru externího úložiště?
Odpovědět: Specifikátor „Externí“ se používá k vyřešení rozsahu globálního symbolu.
#include using nam espace std; main() { extern int i; cout< Ve výše uvedeném kódu může být „i“ viditelné mimo soubor, kde je definováno.
Otázka č. 32) Vysvětlete specifikátor úložiště registru.
Odpovědět: Proměnná „Registrovat“ by měla být použita vždy, když je proměnná použita. Když je proměnná deklarována se specifikátorem „registru“, pak kompilátor dává CPU registr pro své úložiště, aby urychlil vyhledávání proměnné.
nástroje pro nepřetržité nasazení v devops
Otázka č. 33) Kdy použít referenční argumenty „const“ ve funkci?
Odpovědět: Použití referenčních argumentů „const“ ve funkci je výhodné několika způsoby:
- „Const“ chrání před programovacími chybami, které by mohly změnit data.
- V důsledku použití funkce „const“ je funkce schopna zpracovat skutečné i nekonstantní skutečné argumenty, což není možné, pokud není použita funkce „const“.
- Použití odkazu const umožní funkci generovat a používat dočasnou proměnnou vhodným způsobem.
Struktura a typy dat definované uživatelem
Otázka č. 34) Co je to třída?
Odpovědět: Třída je uživatelem definovaný datový typ v C ++. Může být vytvořen k řešení konkrétního druhu problému. Po vytvoření není uživatel povinen znát podrobnosti práce třídy.
Třída obecně funguje jako plán projektu a může zahrnovat různé parametry a funkce nebo akce, které na těchto parametrech pracují. Tito se nazývají členové třídy.
Otázka č. 35) Rozdíl mezi třídou a strukturou.
Odpovědět:
Struktura: V jazyce C se struktura používá k seskupení různých typů datových typů dohromady. Proměnné uvnitř struktury se nazývají členy struktury. Tito členové jsou ve výchozím nastavení veřejní a lze k nim přistupovat pomocí názvu struktury následovaného tečkovým operátorem a poté názvem člena.
Třída: Třída je nástupcem struktury. C ++ rozšiřuje definici struktury tak, aby zahrnovala funkce, které fungují na jejích členech. Ve výchozím nastavení jsou všichni členové uvnitř třídy soukromí.
Objektově orientované programování v C ++
Třídy, konstruktéři, ničitelé
Otázka č. 36) Co je to jmenný prostor?
Odpovědět: Obor názvů nám umožňuje seskupit sadu globálních tříd, objektů a / nebo funkcí pod konkrétním názvem.
Obecná forma použití jmenných prostorů je:
identifikátor oboru názvů {namespace-body}
Kde identifikátor je jakýkoli platný identifikátor a tělo oboru názvů je sada tříd, objektů a funkcí, které jsou zahrnuty v oboru názvů. Jmenné prostory jsou obzvláště užitečné v případě, že existuje možnost, že více než jeden objekt bude mít stejný název, což bude mít za následek střety jmen.
Otázka č. 37) Jaké je použití deklarace „použití“?
Odpovědět: Použití deklarace se používá k odkazování na název z oboru názvů bez operátoru rozlišení oboru.
Otázka č. 38) Co je jméno Mangling?
Odpovědět: Kompilátor C ++ kóduje typy parametrů pomocí funkce / metody do jedinečného názvu. Tento proces se nazývá mangling názvu. Inverzní proces se nazývá demangling.
Příklad:
A :: b (int, long) const je rozbité jako „B__C3Ail“ .
Pro konstruktor je název metody vynechán.
To je A :: A (int, long) const je rozbité jako 'C3Ail'.
Otázka č. 39) Jaký je rozdíl mezi objektem a třídou?
Odpovědět: Třída je plán projektu nebo problému, který má být vyřešen, a skládá se z proměnných a metod. Tito se nazývají členové třídy. Nemůžeme přistupovat k metodám nebo proměnným třídy samostatně, pokud nejsou deklarovány staticky.
Abychom měli přístup ke členům třídy a mohli je používat, měli bychom vytvořit instanci třídy, která se nazývá Object. Třída má neomezenou životnost, zatímco objekt má pouze omezenou životnost.
Otázka č. 40) Jaké jsou různé specifikátory přístupu v C ++?
Odpovědět: C ++ podporuje následující specifikátory přístupu:
- Veřejnost: Datové členy a funkce jsou přístupné mimo třídu.
- Soukromé: Datové členy a funkce nejsou přístupné mimo třídu. Výjimkou je použití třídy přátel.
- Chráněný: Datové členy a funkce jsou přístupné pouze pro odvozené třídy.
Příklad:
Popište SOUKROMÉ, CHRÁNĚNÉ a VEŘEJNÉ spolu s jejich rozdíly a uveďte pří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) Co je konstruktor a jak se nazývá?
Odpovědět: Konstruktor je členská funkce třídy, která má stejný název jako třída. Používá se hlavně pro inicializaci členů třídy. Ve výchozím nastavení jsou konstruktory veřejné.
Konstruktory se nazývají dvěma způsoby:
- Implicitně: Konstruktory jsou implicitně volány kompilátorem, když je vytvořen objekt třídy. Tím se vytvoří objekt na zásobníku.
- Explicitní volání: Když je objekt třídy vytvořen pomocí new, konstruktory jsou volány explicitně. To obvykle vytvoří objekt na haldě.
Pří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) Co je KOPÍROVACÍ KONSTRUKTOR a kdy se volá?
Odpovědět: Konstruktor kopírování je konstruktor, který přijímá objekt stejné třídy jako jeho parametr a kopíruje své datové členy do objektu v levé části přiřazení. Je to užitečné, když potřebujeme postavit nový objekt stejné třídy.
Pří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) Co je výchozí konstruktor?
Odpovědět: Výchozí konstruktor je konstruktor, který buď nemá žádné argumenty, nebo pokud existují, jsou všechny výchozí argumenty.
Pří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) Co je to Konverzní konstruktor?
Odpovědět: Jedná se o konstruktor, který přijímá jeden argument jiného typu. Konstruktory převodu se používají hlavně pro převod z jednoho typu na jiný.
Otázka č. 45) Co je to explicitní konstruktor?
Odpovědět: Konstruktor převodu je deklarován explicitním klíčovým slovem. Kompilátor nepoužívá explicitní konstruktor k implementaci implicitní převodu typů. Jeho účel je výslovně vyhrazen pro stavbu.
Otázka č. 46) Jaká je role klíčového slova Static pro proměnnou člena třídy?
Odpovědět: Proměnná statického člena sdílí společnou paměť napříč všemi objekty vytvořenými pro příslušnou třídu. Nemusíme odkazovat na statickou členskou proměnnou pomocí objektu. Lze k němu však přistupovat pomocí samotného názvu třídy.
Otázka č. 47) Vysvětlete funkci statického člena.
Odpovědět: Statická členská funkce má přístup pouze k statické členské proměnné třídy. Stejně jako statické členské proměnné lze k statické členské funkci přistupovat také pomocí názvu třídy.
Otázka č. 48) V jakém pořadí jsou zničeny místní objekty?
Odpověď: Zvažte následující část kódu:
Class A{ …. }; int main() { A a; A b; ... }
V hlavní funkci máme dva objekty vytvořené jeden po druhém. Jsou vytvořeny v pořadí, nejprve a pak b. Ale když jsou tyto objekty odstraněny nebo pokud jdou mimo rozsah, destruktor pro každý bude volán v opačném pořadí, ve kterém byly zkonstruovány.
Proto bude nejdříve volán destruktor b a poté a. I když máme řadu objektů, budou zničeny stejným způsobem v opačném pořadí jejich vytvoření.
Přetížení
Otázka č. 49) Vysvětlete přetížení funkce a přetížení operátora.
Odpovědět: C ++ podporuje koncept OOPs Polymorfismus, což znamená „mnoho forem“.
V C ++ máme dva typy polymorfismu, tj. Polymorfismus v době kompilace a polymorfismus za běhu. Polymorfismus v době kompilace je dosažen pomocí techniky přetížení. Přetížení jednoduše znamená dát další význam entitě tím, že její základní význam zůstane neporušený.
C ++ podporuje dva typy přetížení:
Přetížení funkce:
Přetížení funkce je technika, která umožňuje programátorovi mít více než jednu funkci se stejným názvem, ale s jiným seznamem parametrů. Jinými slovy, funkci přetížíme různými argumenty, tj. Ať už jde o typ argumentů, počet argumentů nebo pořadí argumentů.
Přetížení funkce se na jeho návratovém typu nikdy nedosáhne.
Přetížení operátora:
Toto je další typ polymorfismu v době kompilace, který podporuje C ++. V přetížení operátoru je operátor přetížen, takže může pracovat na uživatelem definovaných typech i s operandy standardního datového typu. Ale přitom se zachová standardní definice tohoto operátora.
Například, operátor Sčítání (+), který pracuje na numerických datových typech, může být přetížen, aby fungoval na dvou objektech, stejně jako objekt třídy komplexních čísel.
Otázka č. 50) Jaký je rozdíl mezi přetížením metody a přepsáním metody v C ++?
Odpovědět: Přetížení metody má funkce se stejným názvem, ale s různými seznamy argumentů. Toto je forma polymorfismu v době kompilace.
Přepsání metody se projeví, když přepíšeme metodu, která je odvozena od základní třídy. Při řešení polymorfismu za běhu nebo virtuálních funkcí se používá přepsání metody.
Otázka č. 51) Jaký je rozdíl mezi Copy Constructor a Overloaded Operátor přiřazení?
Odpovědět: Konstruktor kopie a přetížený operátor přiřazení v zásadě slouží stejnému účelu, tj. Přiřazení obsahu jednoho objektu jinému. Ale stále existuje rozdíl mezi těmito dvěma.
Příklad:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
Ve výše uvedeném příkladu je druhý příkaz c1 = c2 přetíženým přiřazovacím příkazem.
Zde c1 i c2 jsou již existující objekty a obsah c2 je přiřazen k objektu c1. Proto pro přetížený přiřazovací příkaz musí být oba objekty již vytvořeny.
Další příkaz, komplex c3 = c2 je příkladem konstruktoru kopírování. Zde je obsah c2 přiřazen novému objektu c3, což znamená, že konstruktor kopírování vytvoří nový objekt pokaždé, když se spustí.
Otázka č. 52) Pojmenujte operátory, které nelze přetížit.
Odpovědět:
- sizeof - operátor sizeof
- . - Dot operátor
- . * - operátor dereferencování
- -> - operátor dereferencování členů
- :: - operátor rozlišení oboru
- ?: - podmíněný operátor
Q # 53) Funkce může být přetížena na základě parametru, kterým je hodnota nebo reference. Vysvětlete, zda je tvrzení pravdivé.
Odpovědět: Nepravdivé. Předávání podle hodnoty i předávání podle odkazu vypadají stejně jako volající.
Otázka č. 54) Jaké jsou výhody přetížení operátora?
Odpovědět: Přetížením standardních operátorů ve třídě můžeme rozšířit význam těchto operátorů tak, aby mohli fungovat i na jiných uživatelsky definovaných objektech.
Přetížení funkce nám umožňuje snížit složitost kódu a učinit jej jasnějším a čitelnějším, protože můžeme mít stejné názvy funkcí s různými seznamy argumentů.
Dědictví
Otázka č. 55) Co je dědičnost?
Odpovědět: Dědičnost je proces, pomocí kterého můžeme získat vlastnosti existující entity a vytvořit novou entitu přidáním dalších funkcí.
Pokud jde o C ++, dědičnost vytváří novou třídu odvozením z existující třídy, takže tato nová třída má vlastnosti své nadřazené třídy i své vlastní.
Otázka č. 56) Jaké jsou výhody dědičnosti?
Odpovědět: Dědičnost umožňuje opětovné použití kódu, čímž šetří čas při vývoji kódu.
Děděním využíváme vysoce kvalitní software bez chyb, který snižuje budoucí problémy.
Otázka č. 57) Podporuje C ++ víceúrovňové a více dědičností?
Odpovědět: Ano.
Otázka č. 58) Co je to více dědičností (virtuální dědičnost)? Jaké jsou jeho výhody a nevýhody?
Odpovědět: Ve více dědičnostech máme více než jednu základní třídu, ze které může odvozená třída dědit. Odvozená třída proto přebírá funkce a vlastnosti více než jedné základní třídy.
Například , třída Řidič bude mít dvě základní třídy, jmenovitě, zaměstnanec a osoba, protože řidič je zaměstnancem i osobou. To je výhodné, protože třída řidiče může zdědit vlastnosti zaměstnance i třídy osob.
Ale v případě zaměstnance a osoby bude mít třída společné některé vlastnosti. Nastane však nejednoznačná situace, protože třída ovladače nebude znát třídy, ze kterých by měly být společné vlastnosti zděděny. To je hlavní nevýhoda vícenásobného dědictví.
Otázka č. 59) Vysvětlete vztahy třídy ISA a HASA. Jak byste se realizovali každý?
Odpovědět: Vztah „ISA“ obvykle vykazuje dědičnost, protože naznačuje, že třída „ISA“ specializovaná verze jiné třídy. Například , Zaměstnanec ISA osoba. To znamená, že třída Employee se dědí z třídy Person.
Na rozdíl od „ISA“ vztah „HASA“ zobrazuje, že entita může mít jako svého člena jinou entitu nebo že má třída v sobě vložený jiný objekt.
Takže vezmeme-li stejný příklad třídy Employee, způsob, jakým přidružíme třídu Salary se zaměstnancem, není zděděním, ale zahrnutím nebo obsahujícím objekt Salary uvnitř třídy Employee. Vztah „HASA“ se nejlépe projevuje zadržením nebo agregací.
Otázka č. 60) Dědí odvozená třída nebo nedědí?
Odpovědět: Když je odvozená třída vytvořena z určité základní třídy, v zásadě zdědí všechny funkce a běžné členy základní třídy. Z tohoto pravidla však existují určité výjimky. Například odvozená třída nezdědí konstruktory a destruktory základní třídy.
Každá třída má své vlastní konstruktory a destruktory. Odvozená třída také nezdědí operátor přiřazení základní třídy a přátel třídy. Důvodem je, že tyto entity jsou specifické pro konkrétní třídu a pokud je odvozena jiná třída nebo pokud je přítelem této třídy, nelze jim je předat.
Polymorfismus
Otázka č. 61) Co je to polymorfismus?
Odpovědět: Základní myšlenka polymorfismu je v mnoha formách. V C ++ máme dva typy polymorfismu:
(i) Polymorfismus v době kompilace
V polymorfismu v době kompilace dosáhneme mnoha forem přetížením. Proto máme přetížení operátoru a přetížení funkce. (Toto jsme již pokryli výše)
(ii) Polymorfismus za běhu
Toto je polymorfismus pro třídy a objekty. Obecná myšlenka je, že základní třída může být zděděna několika třídami. Ukazatel základní třídy může ukazovat na svou podřízenou třídu a pole základní třídy může ukládat různé objekty podřízené třídy.
To znamená, že objekt reaguje odlišně na stejné volání funkce. Tento typ polymorfismu může využívat mechanismus virtuálních funkcí.
Otázka č. 62) Co jsou virtuální funkce?
Odpovědět: Virtuální funkce umožňuje odvozeným třídám nahradit implementaci poskytovanou základní třídou.
Kdykoli máme v základní i odvozené třídě funkce se stejným názvem, při pokusu o přístup k objektu podřízené třídy pomocí ukazatele základní třídy vznikne nejednoznačnost. Protože používáme ukazatel základní třídy, je volána funkce funkce základní třídy se stejným názvem.
K opravě této nejednoznačnosti používáme klíčové slovo „virtuální“ před prototypem funkce v základní třídě. Jinými slovy, děláme tuto polymorfní funkci virtuální. Pomocí funkce Virtual můžeme odstranit nejednoznačnost a můžeme správně přistupovat ke všem funkcím podřízené třídy pomocí ukazatele základní třídy.
Otázka č. 63) Uveďte příklad běhového polymorfismu / virtuálních funkcí.
Odpovědět:
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; coutVe výše uvedeném kódu má třída SHAPE čistě virtuální funkci a je abstraktní třídou (nelze vytvořit instanci). Každá třída je odvozena od SHAPE implementující funkci Draw () svým vlastním způsobem.
Dále je každá funkce Draw virtuální, takže když pokaždé použijeme ukazatel základní třídy (SHAPE) s objektem odvozených tříd (Circle a SQUARE), pak jsou volány příslušné Draw funkce.
Otázka č. 64) Co myslíte čistými virtuálními funkcemi?
Odpovědět: Čistá virtuální členská funkce je členská funkce, ve které základní třída vynutí odvozené třídy přepsat. Normálně tato členská funkce nemá žádnou implementaci. Čisté virtuální funkce jsou rovny nule.
Příklad:
class Shape { public: virtual void draw() = 0; };
Základní třídu, jejíž členem je čistě virtuální funkce, lze označit jako „abstraktní třídu“. Tuto třídu nelze vytvořit instanci a obvykle funguje jako plán, který má několik podtříd s další implementací.
Otázka č. 65) Co jsou to virtuální konstruktéři / ničitelé?
Odpovědět:
Virtuální destruktory: Když použijeme ukazatel základní třídy ukazující na objekt odvozené třídy a použijeme jej ke zničení, pak se místo volání odvozeného destruktoru třídy zavolá destruktor základní třídy.
Příklad:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Jak je ukázáno ve výše uvedeném příkladu, když řekneme delete a, bude se volat destruktor, ale ve skutečnosti je to destruktor základní třídy. To vede k nejednoznačnosti, že veškerá paměť držená b nebude správně vymazána.
Tento problém lze vyřešit pomocí konceptu „Virtual Destructor“.
To, co děláme, je, že vytvoříme konstruktor základní třídy „Virtuální“, aby se všechny destruktory podřízené třídy také staly virtuálními a když odstraníme objekt základní třídy ukazující na objekt odvozené třídy, zavolá se příslušný destruktor a všechny objekty jsou správně odstraněny.
To se zobrazuje následovně:
dvě hlavní položky testované v integračním testu jsou rozhraní a očekávané výsledky.
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Virtuální stavitel : Konstruktory nemohou být virtuální. Deklarace konstruktoru jako virtuální funkce je syntaktická chyba.
Příteli
Otázka č. 66) Co je funkce přítele?
Odpovědět: Třída C ++ neumožňuje přístup k jejím soukromým a chráněným členům mimo třídu. Toto pravidlo však lze porušit využitím „ Příteli ”Funkce.
Jak název napovídá, funkce friend je externí funkcí, která je přítelem třídy. Aby funkce friend měla přístup k soukromým a chráněným metodám třídy, měli bychom mít ve třídě prototyp funkce friend s klíčovým slovem „friend“.
Otázka č. 67) Co je třída přátel?
Odpovědět: Třídy přátel se používají, když potřebujeme přepsat pravidlo pro specifikátory soukromého a chráněného přístupu, aby dvě třídy mohly úzce spolupracovat.
Proto můžeme mít třídu přátel, abychom byli přáteli jiné třídy. Tímto způsobem mohou třídy přátel udržovat soukromé nepřístupné věci tak, jak jsou.
Když máme požadavek na přístup k interní implementaci třídy (soukromý člen) bez zveřejnění podrobností zveřejněním, přejdeme k přátelským funkcím.
Pokročilý C ++
Šablony
Otázka č. 68) Co je to šablona?
Odpovědět: Šablony umožňují vytváření funkcí, které jsou nezávislé na datovém typu (obecné) a mohou brát jakýkoli datový typ jako parametry a návratovou hodnotu, aniž by bylo nutné funkci přetížit všemi možnými datovými typy. Šablony téměř splňují funkčnost makra.
Jeho prototyp je některý z následujících:
šablona identifikovat > function_declaration;
šablona identifikovat > function_declaration;
Jediným rozdílem mezi oběma prototypy je použití třídy klíčového slova nebo typename. Jejich základní funkce být obecný zůstává stejná.
Zpracování výjimek
Otázka č. 69) Co je zpracování výjimek? Podporuje C ++ zpracování výjimek?
Odpovědět: Ano, C ++ podporuje zpracování výjimek.
Nemůžeme zajistit, aby se kód vždy spouštěl normálně. Mohou nastat určité situace, které mohou přinést námi napsaný kód k poruše, i když je bezchybný. Této poruše kódu se říká Výjimka .
Když došlo k výjimce, kompilátor ji musí vyhodit, abychom věděli, že došlo k výjimce. Když byla vyvolána výjimka, musí kompilátor zajistit, aby byla zpracována správně, aby tok programu pokračoval nebo správně skončil. Tomu se říká zpracování výjimky.
V C ++ tedy máme tři klíčová slova, tj. Snaž se , házet a úlovek které jsou ve zpracování výjimek.
Obecná syntaxe bloku výjimek je:
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
Jak je uvedeno výše, kód, který by mohl potenciálně selhat, je vložen pod blok try. Při poruše kódu je vyvolána výjimka. Tato výjimka je poté zachycena pod blokem zachycení a je zpracována, tj. Je provedena příslušná akce.
Otázka č. 70) Komentovat standardní výjimky C ++?
Odpovědět: C ++ podporuje některé standardní výjimky, které lze zachytit, pokud vložíme kód do bloku try. Tyto výjimky jsou součástí základní třídy “ std :: exception ”. Tato třída je definována v souboru záhlaví C ++.
Několik příkladů výjimek podporovaných touto třídou zahrnuje:
bad_alloc - vyvolán „novým“
runtime_error - vyvolána pro chyby za běhu
bad_typeid - vyvoláno typem id
Úvod do standardní knihovny šablon
Otázka č. 71) Co je standardní knihovna šablon (STL)? Jaké jsou různé typy kontejnerů STL?
Odpovědět: Standard Template Library (STL) je knihovna šablon kontejnerů schválená výborem ANSI pro zahrnutí do standardní specifikace C ++. Máme různé typy kontejnerů STL v závislosti na tom, jak ukládají prvky.
- Fronta, zásobník - Jsou stejné jako tradiční fronta a zásobník a nazývají se adaptivní kontejnery.
- Nastavit, mapa - Jedná se v zásadě o kontejnery, které mají páry klíč / hodnota a mají asociativní povahu.
- Vektor a - Jedná se o sekvenční charakter a mají podobnost s poli.
Otázka č. 72) Co je třída Iterator?
Odpovědět: V C ++ je třída kontejneru kolekce různých objektů.
Pokud potřebujeme procházet touto kolekcí objektů, nemůžeme to udělat pomocí jednoduchých proměnných indexu. Proto máme v STL speciální třídu nazvanou Iterátor třída, kterou lze použít k procházení obsahu třídy kontejneru.
Mezi různé kategorie iterátorů patří vstupní iterátory, výstupní iterátory, dopředné iterátory, obousměrné iterátory, náhodný přístup atd.
Otázka č. 73) Jaký je rozdíl mezi externím iterátorem a interním iterátorem? Popište výhodu externího iterátoru.
Odpovědět: Interní iterátor je implementován s členskými funkcemi třídy, která má položky k procházení.
Externí iterátor je implementován jako samostatná třída, kterou lze svázat s objektem, který má položky k procházení. Základní výhodou externího iterátoru je, že je snadné jej implementovat, protože je implementován jako samostatná třída.
Zadruhé, protože se jedná o jinou třídu, může být současně aktivních mnoho iteračních objektů.
Další čtení => C # Interview otázky
Závěr
Téměř všechna hlavní témata programování a rozhovorů v C ++ jsou popsána v tomto článku.
Doufáme, že se každý kandidát po přípravě na pohovor pomocí této série otázek na pohovoru bude cítit uvolněně.
Vše nejlepší pro váš rozhovor !!
Doporučené čtení
- Dotazy a odpovědi na pohovor
- ETL Testing Interview Otázky a odpovědi
- Několik složitých otázek a odpovědí na ruční testování
- 25 nejlepších agilních testovacích otázek a odpovědí na rozhovor
- Spock Interview Otázky s odpověďmi (nejoblíbenější)
- Některé zajímavé otázky týkající se testování softwaru
- Top 20+ .NET Interview Otázky a odpovědi
- Top 32 nejlepších datastage dotazů a odpovědí