top 70 c interview questions
Najčešće postavljana osnovna i napredna C ++ pitanja za intervju s primjerima koda za početnike kao i iskusne profesionalce:
Ovaj detaljni članak zasigurno će biti oznaka za one koji se pripremaju za razgovor na C ++.
Gotovo sve glavne teme u C ++-u obrađene su ovdje, zajedno s nekim osnovnim pitanjima o naprednim temama kao što je Standard Template Library (STL), itd.
Ovaj skup pitanja o kodiranju za C ++ pomoći će vam da se s bilo kojim C ++ intervjuom suočite s povjerenjem i uspješno ga očistite u prvom pokušaju.
Što ćete naučiti:
- C ++ pitanja za intervju s primjerima koda
C ++ pitanja za intervju s primjerima koda
U nastavku su navedena najpopularnija pitanja za programski razgovor za C ++ na koja odgovara stručnjak za C ++.
Također pročitajte => Top C pitanja za intervju za programiranje
Osnovni C ++
Struktura programa C ++
P # 1) Koja je osnovna struktura programa C ++?
Odgovor: Osnovna struktura programa C ++ prikazana je u nastavku:
#include int main() { cout<<”Hello,World!”; return 0; }
Prvi redak koji započinje s „ # ' je direktiva o pretprocesoru . U ovom slučaju koristimo uključuju kao direktivu koja prevoditelju govori da uključi zaglavlje dok ' iostream.h ”Koji će se koristiti za osnovni ulaz / izlaz kasnije u programu.
Sljedeći je redak funkcija 'glavna' koja vraća cijeli broj. Glavna funkcija je početna točka izvršenja bilo kojeg programa C ++. Bez obzira na njegov položaj u datoteci izvornog koda, sadržaj glavne funkcije uvijek prvo izvršava kompajler C ++.
U sljedećem retku možemo vidjeti otvorene kovrčave zagrade koje označavaju početak bloka koda. Nakon toga vidimo programsku uputu ili liniju koda koja koristi count koji je standardni izlazni tok (njegova definicija je prisutna u iostream.h).
Ovaj izlazni tok uzima niz znakova i ispisuje ga na standardni izlazni uređaj. U ovom slučaju to je: 'Zdravo, Svijete!'. Imajte na umu da svaka naredba C ++ završava zarezom (;), što je itekako potrebno, a izostavljanje će rezultirati pogreškama u kompilaciji.
Prije zatvaranja zagrada}, vidimo još jedan redak “return 0;”. Ovo je točka povratka na glavnu funkciju.
Svaki program C ++ imat će osnovnu strukturu kao što je gore prikazano s direktivom pretprocesora, deklaracijom glavne funkcije nakon koje slijedi blok koda, a zatim povratna točka glavnoj funkciji koja označava uspješno izvršavanje programa.
P # 2) Koji su komentari na C ++?
Odgovor: Komentari na C ++-u jednostavno su komad izvornog koda koji je prevodilac ignorirao. Za programera su korisni samo ako dodaju opis ili dodatne informacije o svom izvornom kodu.
U C ++ postoje dva načina za dodavanje komentara:
- // jednoredni komentar
- / * blokiraj komentar * /
Prva vrsta odbacit će sve nakon što kompajler naiđe na '//'. U drugom tipu, kompajler odbacuje sve između '/ *' i '* /'.
Varijable, vrste podataka i konstante
P # 3) Razlika između deklaracije i definicije varijable.
Odgovor: Deklaracija varijable samo specificira tip podataka varijable i ime varijable. Kao rezultat deklaracije, kažemo prevoditelju da rezervira prostor za varijablu u memoriji prema navedenom tipu podataka.
Primjer:
int Result; char c; int a,b,c;
Sve navedeno valjane su izjave. Također, imajte na umu da kao rezultat deklaracije vrijednost varijable nije određena.
Dok je definicija implementacija / instancija deklarirane varijable gdje vezujemo odgovarajuću vrijednost za deklariranu varijablu tako da će povezivač moći povezati reference na odgovarajuće entitete.
Odozgo Primjer ,
Rezultat = 10;
C = 'A';
To su valjane definicije.
P # 4) Komentar lokalnog i globalnog opsega varijable.
Odgovor: Opseg varijable definiran je kao opseg programskog koda unutar kojeg varijabla ostaje aktivna, tj. Može se deklarirati, definirati ili raditi s njom.
U C ++-u postoje dvije vrste opsega:
- Lokalni opseg: Kaže se da varijabla ima lokalni opseg ili je lokalna kada je deklarirana unutar bloka koda. Varijabla ostaje aktivna samo unutar bloka i nije joj dostupna izvan bloka koda.
- Globalni opseg: Varijabla ima globalni opseg kada je dostupna u cijelom programu. Globalna varijabla deklarira se na vrhu programa prije svih definicija funkcije.
Primjer:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
P # 5) Koji je prioritet kada u programu postoje istovjetna globalna varijabla i lokalna varijabla?
Odgovor: Kad god postoji lokalna varijabla s istim imenom kao i globalna varijabla, kompajler daje prednost lokalnoj varijabli.
Primjer:
#include int globalVar = 2; int main() { int globalVar = 5; cout<Izlaz gornjeg koda je 5. To je zato što, iako obje varijable imaju isto ime, kompajler je dao prednost lokalnom opsegu.
P # 6) Kada postoje globalna varijabla i lokalna varijabla s istim imenom, kako ćete pristupiti globalnoj varijabli?
Odgovor: Kada postoje dvije varijable s istim imenom, ali različitim opsegom, tj. Jedna je lokalna varijabla, a druga globalna varijabla, sastavljač će dati prednost lokalnoj varijabli.
Da bismo pristupili globalnoj varijabli, koristimo ' operater razlučivosti opsega (: :) '. Pomoću ovog operatora možemo pristupiti vrijednosti globalne varijable.
Primjer:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< Izlaz:
Globalna varijabla x = 10
lokalna varijabla x = 2
P # 7) Na koliko načina postoji inicijalizacija int s konstantom?
Odgovor: Postoje dva načina:
- Prvi format koristi tradicionalnu oznaku C.
rezultat int = 10; - Drugi format koristi oznaku konstruktora.
rezultat int (10);
Konstante
P # 8) Što je konstanta? Objasnite na primjeru.
Odgovor: Konstanta je izraz koji ima fiksnu vrijednost. Mogu se podijeliti na konstante cijelih, decimalnih, s pomičnim zarezom, znakova ili nizova, ovisno o njihovom tipu podataka.
Osim decimalne, C ++ također podržava još dvije konstante, tj. Osminsku (na bazu 8) i heksadecimalnu (na bazu 16) konstante.
Primjeri konstanti:
- 75 // cijeli broj (decimalni)
- 0113 // osmerokuta
- 0x4b // heksadecimalno
- 3.142 // plutajuća točka
- ‘C’ // konstanta znakova
- “Hello, World” // string konstanta
Bilješka: Kada moramo predstavljati jedan znak, koristimo pojedinačne navodnike, a kada želimo definirati konstantu s više znakova, koristimo dvostruke navodnike.
P # 9) Kako definirate / deklarirate konstante u C ++?
Odgovor: U C ++-u možemo definirati vlastite konstante pomoću #definirati direktiva o pretprocesoru.
#define vrijednost identifikatora
Primjer:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< Izlaz: Površina kruga = 78,55
Kao što je prikazano u gornjem primjeru, nakon što definiramo konstantu pomoću #define direktive, možemo je koristiti u cijelom programu i zamijeniti njezinu vrijednost.
Konstante u C ++ možemo deklarirati pomoću ' konst ”Ključna riječ. Ovaj način sličan je načinu deklariranja varijable, ali s const prefiksom.
Primjeri proglašenja konstante
const int pi = 3.142;
const char c = 'sth';
const poštanski broj = 411014;
U gornjim primjerima, kad god vrsta konstante nije navedena, C ++ prevodilac zadaje je za cijeli broj.
Operateri
P # 10) Komentar operatora dodjele na C ++.
Odgovor: Operator dodjele u C ++ koristi se za dodjeljivanje vrijednosti drugoj varijabli.
a = 5;
Ovaj redak koda dodjeljuje cijelu vrijednost 5 na promjenjivu do .
Dio s lijeve strane operatora = poznat je kao Vrijednost (lijeva vrijednost), a desna kao rvalue (prava vrijednost). L vrijednost uvijek mora biti varijabla, dok desna strana može biti konstanta, varijabla, rezultat operacije ili bilo koja njihova kombinacija.
Operacija dodjele uvijek se odvija s desna na lijevo i nikad obrnuto.
Jedno svojstvo koje C ++ ima u odnosu na ostale programske jezike je da se operator dodjele može koristiti kao rvalue (ili dio rvalue ) za drugi zadatak.
Primjer:
a = 2 + (b = 5);
ekvivalentno je:
b = 5;
a = 2 + b;
Što znači, prvo dodijelite 5 na promjenjivu b a zatim dodijeliti do, vrijednost dva plus rezultat prethodnog izraza b (to je 5), odlazi do s konačnom vrijednošću od 7 .
Dakle, sljedeći izraz vrijedi i u jeziku C ++:
a = b = c = 5;
dodijeliti 5 varijablama do , b i c .
P # 11) Koja je razlika između jednak (==) i operatoru dodjele (=)?
Odgovor: U C ++-u jednaka (==) i operator dodjeljivanja (=) dva su potpuno različita operatora.
Jednako (==) je relacijski operator jednakosti koji procjenjuje dva izraza kako bi utvrdio jesu li jednaki i vraća true ako su jednaki i false ako nisu.
Operator dodjele (=) koristi se za dodjeljivanje vrijednosti varijabli. Stoga možemo imati složenu operaciju dodjele unutar relacijskog operatora jednakosti za procjenu.
P # 12) Koji su različiti aritmetički operatori u C ++?
Odgovor: C ++ podržava sljedeće aritmetičke operatore:
- + dodatak
- - oduzimanje
- * množenje
- / podjela
- % modul
Pokažimo razne aritmetičke operatore sa sljedećim dijelom koda.
Primjer:
#include int main () { int a=5, b=3; cout<<”a + b = “< Izlaz :
a + b = 8
a - b = 2
a * b = 15
a / b = 2
a% b = 1
Kao što je gore prikazano, sve ostale operacije su izravne i iste su kao stvarne aritmetičke operacije, osim modulskog operatora koji je sasvim drugačiji. Modulo operator dijeli a i b, a rezultat operacije je ostatak dijeljenja.
P # 13) Koji su različiti složeni operateri dodjele u C ++-u?
Odgovor: Slijede složeni operateri dodjele u C ++:
+ =, - =, * =, / =,% =, >> =,<<=, &=, ^=,|=
Složeni operater dodjele jedno je od najvažnijih obilježja jezika C ++ koji nam omogućuje promjenu vrijednosti varijable s jednim od osnovnih operatora:
Primjer:
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;
P # 14) Navedite razliku između operacija povećanja / smanjenja prije i poslije.
Odgovor: C ++ omogućuje dva operatora, tj. ++ (prirast) i - (umanjivanje), koji vam omogućuju dodavanje 1 postojećoj vrijednosti varijable i oduzimanje 1 od varijable. Ti se operatori redom nazivaju priraštaj (++) i dekrement (-).
Primjer:
a = 5;
a ++;
Druga izjava, ++, uzrokovat će dodavanje vrijednosti 1 u vrijednost a. Dakle, ++ je ekvivalentan
a = a + 1; ili
a + = 1;
Jedinstvena značajka ovih operatora je ta što tim operatorima možemo dodavati prefikse ili sufikse s varijablom. Dakle, ako je a varijabla i mi stavljamo prefiks operatora prirasta, to će biti
++ a;
To se naziva Pre-inkrement. Slično tome, imamo i prethodni dekrement.
Ako varijabli a dodamo prefiks operatorom prirasta, imat ćemo,
a ++;
Ovo je post-priraštaj. Isto tako, imamo i naknadno smanjenje.
Razlika između značenja pre i post ovisi o načinu procjene izraza i pohrani rezultata.
U slučaju operatora pred-povećanja / smanjenja, prvo se provodi operacija povećavanja / smanjenja, a zatim se rezultat prosljeđuje na vrijednost lvalue. Dok se za operacije nakon povećanja / smanjenja, vrijednost l prvo vrednuje, a zatim se u skladu s tim vrši povećanje / smanjenje.
Primjer:
a = 5; b = 6;
++ a; # a = 6
b–; # b = 6
–A; # a = 5
b ++; # 6
I / O putem konzole
P # 15) Koji su operateri ekstrakcije i umetanja u C ++? Objasnite na primjerima.
Odgovor: U biblioteci iostream.h na C ++, Kina , i trošak su dva toka podataka koji se koriste za ulaz i izlaz. Cout je obično usmjeren na zaslon, a cin je dodijeljen tipkovnici.
“Cin” (operater ekstrakcije): Korištenjem preopterećenog operatora >> s cin streamom, C ++ obrađuje standardni ulaz.
int age; cin>>age;
Kao što je prikazano u gornjem primjeru, proglašava se cjelovita varijabla 'dob', a zatim se čeka da cin (tipkovnica) unese podatke. 'Cin' obrađuje ulaz samo kad se pritisne tipka RETURN.
“Cout” (operator umetanja): To se koristi zajedno s preopterećenim<< operator. It directs the data that followed it into the cout stream.
Primjer:
najbolji softver za upravljanje zadacima za Windows
cout<<”Hello, World!”; cout<<123;
Upravljačke strukture i funkcije
Kontrolne strukture i petlje
P # 16) Koja je razlika između while i do while petlje? Objasnite na primjerima.
Odgovor: Format while petlje u C ++-u je:
Dok (izraz)
{izjave;}
Blok naredbi pod while izvršava se sve dok je uvjet u danom izrazu istinit.
Primjer:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<U gornjem kodu, petlja će izravno izaći ako je n 0. Dakle, u while petlji, završni uvjet je na početku petlje i ako je ispunjen, ne izvršavaju se iteracije petlje.
Dalje ćemo razmotriti petlju do-while.
Općeniti format rada-vremena je:
do {statement;} while (uvjet);
Primjer:
#include int main() { int n; cout<>n; do { cout<U gornjem kodu možemo vidjeti da se naredba unutar petlje izvršava barem jednom jer je uvjet petlje na kraju. To su glavne razlike između vremena i vremena rada.
U slučaju while petlje, možemo izravno izaći iz petlje na početku, ako uvjet nije zadovoljen, dok u do-while petlji izvršavamo izjave petlje barem jednom.
Funkcije
P # 17) Što podrazumijevate pod pojmom 'void' povrat?
Odgovor: Sve bi funkcije trebale vratiti vrijednost prema općoj sintaksi.
Međutim, u slučaju da, ako ne želimo da funkcija vraća bilo kakvu vrijednost, koristimo ' poništiti ”Da to ukaže. To znači da koristimo „ poništiti 'Da označi da funkcija nema povratnu vrijednost ili vraća' poništiti '.
Primjer:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
P # 18) Objasnite Pass by Value i Pass by Reference.
Odgovor: Dok prosljeđujemo parametre funkciji pomoću 'Proslijedi vrijednost', kopiju parametara prosljeđujemo funkciji.
Stoga, sve promjene u parametrima u pozvanoj funkciji ne vraćaju se pozivajućoj funkciji. Stoga varijable u pozivajućoj funkciji ostaju nepromijenjene.
Primjer:
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 = “< Izlaz:
x = 1
y = 3
z = 4
Kao što se vidi gore, iako su parametri promijenjeni u pozvanoj funkciji, njihove vrijednosti nisu se odražavale u pozivajućoj funkciji jer su prosljeđivane po vrijednosti.
Međutim, ako želimo vratiti promijenjene vrijednosti iz funkcije natrag u funkciju koja poziva, tada koristimo tehniku 'Prođi referencu'.
Da bismo to demonstrirali, gornji program modificiramo na sljedeći način:
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 = “< Izlaz:
x = 2
y = 6
z = 8
Kao što je gore prikazano, izmjene parametara u pozvanim funkcijama prosljeđuju se pozivajućoj funkciji kada koristimo tehniku 'Prođi referencu'. To je zato što pomoću ove tehnike ne prosljeđujemo kopiju parametara, već zapravo prosljeđujemo samu referencu varijable.
P # 19) Koji su zadani parametri? Kako se ocjenjuju u funkciji C ++?
Odgovor: Zadani parametar vrijednost je koja se dodjeljuje svakom parametru tijekom deklariranja funkcije.
Ova se vrijednost koristi ako taj parametar ostane prazan tijekom poziva funkcije. Da bismo odredili zadanu vrijednost za određeni parametar, jednostavno dodijelimo vrijednost parametru u deklaraciji funkcije.
Ako vrijednost nije proslijeđena za ovaj parametar tijekom poziva funkcije, tada prevodilac koristi zadanu zadanu vrijednost. Ako je navedena vrijednost, tada se stupa na ovu zadanu vrijednost i koristi se proslijeđena vrijednost.
Primjer:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< Izlaz:
12
6
Kao što je prikazano u gornjem kodu, postoje dva poziva na funkciju množenja. U prvom pozivu s vrijednošću se prenosi samo jedan parametar. U ovom je slučaju drugi parametar zadana vrijednost. Ali u drugom pozivu, kako se prosljeđuju obje vrijednosti parametra, zadana vrijednost se poništava i koristi se prenesena vrijednost.
P # 20) Što je ugrađena funkcija u C ++?
Odgovor: Inline funkcija je funkcija koju kompajler sastavlja kao točku pozivanja funkcije i kod se u toj točki zamjenjuje kod. To čini brže sastavljanje. Ova je funkcija definirana dodavanjem prefiksa prototipa funkcije ključnom riječi 'inline'.
Takve su funkcije korisne samo kada je kod ugrađene funkcije mali i jednostavan. Iako je funkcija definirana kao Inline, ona je potpuno ovisna o prevoditelju da bi je procijenila kao inline ili ne.
Struktura naprednih podataka
Nizovi
P # 21) Zašto se nizovi obično obrađuju s for loop?
Odgovor: Niz koristi indeks za prelazak svakog od njegovih elemenata.
Ako je A niz, tada se svakom od njegovih elemenata pristupa kao A [i]. Programski, sve što je potrebno da bi to funkcioniralo je iterativni blok s varijablom petlje i koji služi kao indeks (brojač) uvećavajući od 0 do A.length-1.
To je upravo ono što petlja radi i to je razlog zašto obrađujemo nizove koristeći petlje.
Q # 22) Navedite razliku između brisanja i brisanja [].
Odgovor: “Delete []” koristi se za oslobađanje memorije dodijeljene nizu koji je dodijeljen pomoću novog []. 'Delete' koristi se za oslobađanje jednog dijela memorije koji je dodijeljen pomoću novog.
P # 23) Što nije u redu s ovim kodom?
T * p = novi T [10];
izbriši p;
Odgovor: Gornji kôd sintaktički je točan i izvrsno će se kompajlirati.
Jedini je problem što će samo izbrisati prvi element niza. Iako je cijeli niz izbrisan, pozvat će se samo destruktor prvog elementa i osloboditi se memorija za prvi element.
P # 24) Kojim se redoslijedom uništavaju objekti u nizu?
Odgovor: Objekti u nizu uništavaju se obrnutim redoslijedom konstrukcije: Prvo izgrađeno, posljednje uništeno.
U slijedećem primjeru, redoslijed destruktora bit će [9], a [8],…, a [1], a [0]:
voiduserCode() { Car a[10]; ... }
Pokazivači
P # 25) Što nije u redu s ovim kodom?
T * p = 0;
izbriši p;
Odgovor: U gornjem kodu pokazivač je nulti pokazivač. Prema standardu C ++ 03, potpuno je valjano pozvati delete na NULL pokazivaču. Operator brisanja interno bi se pobrinuo za provjeru NULL.
P # 26) Što je referentna varijabla u C ++?
Odgovor: Referentna varijabla pseudonim je imena postojeće varijable. To znači da i ime varijable i referentna varijabla usmjeravaju na isto mjesto memorije. Dakle, kad god se varijabla ažurira, ažurira se i referenca.
Primjer:
int a=10; int& b = a;
Ovdje je b referenca na a.
Klase skladištenja
P # 27) Što je klasa pohrane? Spomenite klase pohrane u C ++.
Odgovor: Klasa pohrane određuje vijek trajanja ili opseg simbola kao što su varijabla ili funkcije.
C ++ podržava sljedeće klase pohrane:
- Auto
- Statički
- Vanjski
- Registar
- Promjenjivo
P # 28) Objasnite specifikator klase promjenjive memorije.
Odgovor: Varijabla člana objekta konstantne klase ne može se mijenjati. Međutim, deklariranjem varijabli kao „promjenjivih“, možemo promijeniti vrijednosti tih varijabli.
P # 29) Čemu služi ključna riječ auto?
Odgovor: Prema zadanim postavkama, svaka lokalna varijabla funkcije je automatski tj. auto . U donjoj su funkciji i varijable 'i' i 'j' automatske varijable.
najbolji besplatni softver za sigurnosne kopije za mac
void f() { int i; auto int j; }
BILJEŠKA : Globalna varijabla nije automatska varijabla.
P # 30) Što je statička varijabla?
Odgovor: Statička varijabla je lokalna varijabla koja zadržava vrijednost u pozivima funkcije. Statičke varijable deklariraju se pomoću ključne riječi 'static'. Numeričke varijable koje su statične imaju zadanu vrijednost nula.
Sljedeća funkcija ispisat će 1 2 3 ako se tri puta pozove.
void f() { static int i; ++i; printf(“%d “,i); }
Ako je globalna varijabla statična, tada je njezina vidljivost ograničena na isti izvorni kod.
P # 31) Koja je svrha Extern Storage Specifier?
Odgovor: Specifikator 'Extern' koristi se za rješavanje opsega globalnog simbola.
#include using nam espace std; main() { extern int i; cout< U gornjem kodu, 'i' može biti vidljivo izvan datoteke gdje je definirano.
P # 32) Objasnite Specifier Storage Storage.
Odgovor: Varijabla „Registriraj se“ treba koristiti kad god se koristi varijabla. Kad se varijabla deklarira s specifikatorom „register“, tada kompajler daje CPU registar za njezino pohranjivanje kako bi ubrzao traženje varijable.
P # 33) Kada koristiti referentne argumente “const” u funkciji?
Odgovor: Korištenje referentnih argumenata 'const' u funkciji korisno je na nekoliko načina:
- 'Const' štiti od programskih pogrešaka koje bi mogle promijeniti podatke.
- Kao rezultat korištenja 'const', funkcija je sposobna obraditi i const i non-const stvarne argumente, što nije moguće kada se ne koristi 'const'.
- Korištenje reference const omogućit će funkciji da generira i koristi privremenu varijablu na odgovarajući način.
Struktura i korisnički definirani tipovi podataka
P # 34) Što je razred?
Odgovor: Klasa je korisnički definirani tip podataka u C ++. Može se stvoriti za rješavanje određene vrste problema. Nakon stvaranja, korisnik ne mora znati detalje o radu klase.
Općenito, klasa djeluje kao nacrt projekta i može uključivati različite parametre i funkcije ili radnje koje djeluju na te parametre. Oni se nazivaju članovima razreda.
P # 35) Razlika između klase i strukture.
Odgovor:
Struktura: U jeziku C, struktura se koristi za grupiranje različitih vrsta podataka. Varijable unutar strukture nazivaju se članovima strukture. Ti su članovi prema zadanim postavkama javni i može im se pristupiti pomoću naziva strukture iza kojeg slijedi operater točke, a zatim imena člana.
Klasa: Razred je nasljednik Strukture. C ++ proširuje definiciju strukture tako da uključuje funkcije koje djeluju na njene članove. Prema zadanim postavkama svi su članovi klase privatni.
Objektno orijentirano programiranje sa C ++
Predavanja, konstruktori, destruktori
P # 36) Što je prostor imena?
Odgovor: Prostor imena omogućuje nam grupiranje skupa globalnih klasa, objekata i / ili funkcija pod određenim imenom.
Općeniti oblik korištenja prostora imena je:
identifikator prostora imena {namespace-body}
Gdje je identifikator bilo koji valjani identifikator, a tijelo prostora prostora je skup klasa, objekata i funkcija koji su uključeni u prostor imena. Prostori imena posebno su korisni u slučaju kada postoji mogućnost da više objekata ima isto ime, što rezultira sukobima imena.
P # 37) Koja je korist od deklaracije 'koristeći'?
Odgovor: Korištenje deklaracije koristi se za upućivanje imena iz prostora imena bez operatora razlučivanja opsega.
P # 38) Što je ime Mangling?
Odgovor: Kompajler C ++ kodira tipove parametara funkcijom / metodom u jedinstveno ime. Taj se postupak naziva mangling name. Inverzni proces naziva se demantiranjem.
Primjer:
A :: b (int, dugo) const je iskvaren kao ‘B__C3Ail’ .
Za konstruktor, ime metode je izostavljeno.
To je A :: A (int, dugo) const je iskvaren kao 'C3Ail'.
P # 39) Koja je razlika između predmeta i klase?
Odgovor: Predavanje je nacrt projekta ili problema koji treba riješiti i sastoji se od varijabli i metoda. Oni se nazivaju članovima razreda. Metodama ili varijablama klase ne možemo pristupiti samostalno ako nisu proglašene statičkim.
Da bismo pristupili članovima klase i stavili ih u upotrebu, trebali bismo stvoriti instancu klase koja se naziva Objekt. Klasa ima neograničen životni vijek, dok objekt ima samo ograničeni životni vijek.
P # 40) Koji su razni specifikatori pristupa u C ++?
Odgovor: C ++ podržava sljedeće specifikatore pristupa:
- Javnost: Članovima podataka i funkcijama dostupni su izvan klase.
- Privatna: Članovima podataka i funkcijama nije moguće pristupiti izvan klase. Izuzetak je upotreba klase prijatelja.
- Zaštićen: Članovi podataka i funkcije dostupni su samo izvedenim klasama.
Primjer:
Opišite PRIVATNE, ZAŠTIĆENE i JAVNE, zajedno s njihovim razlikama, i navedite primjere.
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
P # 41) Što je konstruktor i kako se zove?
Odgovor: Konstruktor je funkcija člana klase koja ima isto ime kao i klasa. Uglavnom se koristi za inicijalizaciju članova razreda. Prema zadanim postavkama konstruktori su javni.
Postoje dva načina na koja se nazivaju konstruktori:
- Implicitno: Kompajler implicitno poziva konstruktore kada se kreira objekt klase. Ovo stvara objekt na stogu.
- Eksplicitno pozivanje: Kada se objekt klase kreira pomoću new, konstruktori se eksplicitno pozivaju. To obično stvara objekt na hrpi.
Primjer:
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. }
P # 42) Što je KOPIRNI KONSTRUKTOR i kada se zove?
Odgovor: Konstruktor kopiranja je konstruktor koji prihvaća objekt iste klase kao svoj parametar i kopira svoje članove podataka u objekt na lijevom dijelu zadatka. Korisno je kada moramo konstruirati novi objekt iste klase.
Primjer:
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 }
P # 43) Što je zadani konstruktor?
Odgovor: Zadani konstruktor je konstruktor koji ili nema argumente ili ako ih ima, tada su svi zadani argumenti.
Primjer:
class B { public: B (int m = 0) : n (m) {} int n; }; int main(int argc, char *argv[]) { B b; return 0; }
P # 44) Što je konstruktor pretvorbe?
Odgovor: Konstruktor je koji prihvaća jedan argument druge vrste. Konstruktori za pretvorbu uglavnom se koriste za pretvaranje iz jedne vrste u drugu.
P # 45) Što je eksplicitni konstruktor?
Odgovor: Konstruktor konverzije deklariran je s eksplicitnom ključnom riječi. Prevoditelj ne koristi eksplicitni konstruktor za provedbu implicirane pretvorbe tipova. Njegova je namjena izričito rezervirana za izgradnju.
P # 46) Koja je uloga ključne riječi Static za varijablu člana razreda?
Odgovor: Varijabla statičkog člana dijeli zajedničku memoriju svih objekata stvorenih za odgovarajuću klasu. Ne trebamo se pozivati na statičku varijablu člana pomoću objekta. Međutim, može mu se pristupiti pomoću samog naziva klase.
P # 47) Objasnite funkciju statičkog člana.
Odgovor: Funkcija statičkog člana može pristupiti samo varijabli statičkog člana klase. Jednako kao i varijabla statičkog člana, funkciji statičkog člana također se može pristupiti pomoću naziva klase.
P # 48) Kojim se redoslijedom uništavaju lokalni objekti?
Odgovor: Razmislite o slijeđenju dijela koda:
Class A{ …. }; int main() { A a; A b; ... }
U glavnoj funkciji imamo dva objekta stvorena jedan za drugim. Stvaraju se redom, prvo a zatim b. Ali kad se ti objekti izbrišu ili ako izađu izvan opsega, destruktor za svaki od njih pozvat će se obrnutim redoslijedom kojim su konstruirani.
Stoga će se prvo nazvati destruktor b, a zatim a. Čak i ako imamo niz objekata, oni će biti uništeni na isti način obrnutim redoslijedom njihovog stvaranja.
Preopterećenje
P # 49) Objasnite preopterećenje funkcije i preopterećenje operatora.
Odgovor: C ++ podržava koncept OOP-a Polimorfizam što znači 'mnogi oblici'.
U C ++ imamo dvije vrste polimorfizma, tj. Polimorfizam kompilacije i polimorfizam vremena izvođenja. Polimorfizam kompilacije postiže se tehnikom preopterećenja. Preopterećenje jednostavno znači davanje dodatnog značenja entitetu zadržavanjem njegovog osnovnog značenja netaknutim.
C ++ podržava dvije vrste preopterećenja:
Preopterećenje funkcije:
Preopterećenje funkcije tehnika je koja programeru omogućuje više od jedne funkcije s istim imenom, ali različitim popisom parametara. Drugim riječima, funkciju preopterećujemo različitim argumentima, tj. Bila to vrsta argumenata, broj argumenata ili redoslijed argumenata.
Preopterećenje funkcije nikada se ne postiže na povratnom tipu.
Preopterećenje operatera:
Ovo je još jedna vrsta polimorfizma u vremenu kompajliranja koju podržava C ++. U preopterećenju operatora, operator je preopterećen, tako da može raditi na korisnički definiranim tipovima, kao i na operandima standardnog tipa podataka. No dok to radimo, standardna definicija tog operatora ostaje netaknuta.
Na primjer, operator sabiranja (+) koji djeluje na numeričkim vrstama podataka može se preopteretiti za rad s dva objekta baš kao i objekt složene klase brojeva.
P # 50) Koja je razlika između preopterećenja metode i nadjačavanja metode u C ++?
Odgovor: Preopterećenje metode ima funkcije s istim imenom, ali različitim popisima argumenata. Ovo je oblik polimorfizma u vremenu kompajliranja.
Nadjačavanje metode dolazi u sliku kada prepišemo metodu koja je izvedena iz osnovne klase. Nadjačavanje metode koristi se tijekom bavljenja polimorfizmom u toku izvođenja ili virtualnim funkcijama.
P # 51) Koja je razlika između konstruktora za kopiranje i preopterećenog Operator dodjele?
Odgovor: Konstruktor kopije i preopterećeni operator dodjele u osnovi imaju istu svrhu, tj. Dodjeljivanje sadržaja jednog objekta drugom. Ali ipak postoji razlika između njih dvoje.
Primjer:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
U gornjem primjeru, druga izjava c1 = c2 je preopterećena izjava o dodjeli.
Ovdje su i c1 i c2 već postojeći objekti i sadržaj c2 dodjeljuje se objektu c1. Dakle, za preopterećeni izraz dodjele oba objekta već treba stvoriti.
Sljedeća izjava, kompleks c3 = c2 je primjer konstruktora kopiranja. Ovdje je sadržaj c2 dodijeljen novom objektu c3, što znači da konstruktor kopiranja stvara novi objekt svaki put kada se izvrši.
P # 52) Navedite operatore koji se ne mogu preopteretiti.
Odgovor:
- sizeof - veličina operatora
- . - Operator točkica
- . * - operator preusmjeravanja
- -> - operater preusmjeravanja člana
- :: - operater za razlučivanje opsega
- ?: - uvjetni operator
P # 53) Funkcija se može preopteretiti na temelju parametra koji je vrijednost ili referenca. Objasnite je li tvrdnja istinita.
Odgovor: Lažno. I prosljeđivanje vrijednosti i prosljeđivanje referencom izgledaju identično pozivatelju.
P # 54) Koje su prednosti preopterećenja operatera?
Odgovor: Preopterećenjem standardnih operatora na klasi možemo proširiti značenje tih operatora, tako da mogu raditi i na ostalim korisnički definiranim objektima.
Preopterećenje funkcije omogućuje nam da smanjimo složenost koda i učinimo ga jasnijim i čitljivijim jer možemo imati ista imena funkcija s različitim popisima argumenata.
Nasljeđivanje
P # 55) Što je nasljeđivanje?
Odgovor: Nasljeđivanje je postupak pomoću kojeg možemo steći obilježja postojećeg entiteta i formirati novi entitet dodajući mu više značajki.
U smislu C ++, nasljeđivanje stvara novu klasu izvodeći je iz postojeće klase tako da ova nova klasa ima svojstva svoje roditeljske klase kao i svoje.
P # 56) Koje su prednosti nasljeđivanja?
Odgovor: Nasljeđivanje omogućuje ponovnu upotrebljivost koda, čime se štedi vrijeme na razvoju koda.
Nasljeđivanjem koristimo visokokvalitetni softver bez bugova koji smanjuje buduće probleme.
P # 57) Podržava li C ++ višerazinsko i višestruko nasljeđivanje?
Odgovor: Da.
P # 58) Što su više nasljeđa (virtualno nasljeđivanje)? Koje su njegove prednosti i nedostaci?
Odgovor: U više nasljeđa imamo više od jedne osnovne klase iz koje izvedena klasa može naslijediti. Stoga izvedena klasa uzima značajke i svojstva više od jedne osnovne klase.
Na primjer , razred vozač imat će dvije osnovne klase, naime, zaposlenik i osoba jer je vozač zaposlenik kao i osoba. To je povoljno jer klasa vozača može naslijediti svojstva zaposlenika kao i klasu osoba.
Ali u slučaju zaposlenika i osobe, razred će imati neka zajednička svojstva. Međutim, doći će do dvosmislene situacije jer klasa vozača neće znati klase iz kojih treba naslijediti zajednička svojstva. To je glavni nedostatak više nasljedstava.
P # 59) Objasnite odnos klase ISA i HASA. Kako biste provodili svaki?
Odgovor: Odnos “ISA” obično pokazuje nasljeđivanje jer podrazumijeva da je klasa “ISA” specijalizirana verzija druge klase. Na primjer , Zaposlena ISA osoba. To znači da se klasa Employee nasljeđuje iz klase Person.
Suprotno “ISA”, odnos “HASA” prikazuje da entitet može imati drugi entitet kao svog člana ili klasa ima ugrađen drugi objekt.
Uzimajući dakle isti primjer klase Employee, način na koji klasu Plaća povezujemo sa zaposlenikom nije njezinim nasljeđivanjem, već uključivanjem ili sadržavanjem objekta Salary unutar klase Employee. Odnos “HASA” najbolje se pokazuje zadržavanjem ili agregacijom.
P # 60) Slijedi li izvedena klasa ili ne?
Odgovor: Kada se izvedena klasa konstruira od određene osnovne klase, ona u osnovi nasljeđuje sve značajke i obične članove osnovne klase. Ali postoje neke iznimke od ovog pravila. Na primjer, izvedena klasa ne nasljeđuje konstruktore i destruktore osnovne klase.
Svaka klasa ima svoje konstruktore i destruktore. Izvedena klasa također ne nasljeđuje operator dodjele osnovne klase i prijatelja klase. Razlog je taj što su ti entiteti specifični za određenu klasu i ako je izvedena druga klasa ili je prijatelj te klase, onda im se ne mogu proslijediti.
Polimorfizam
P # 61) Što je polimorfizam?
Odgovor: Osnovna ideja polimorfizma je u mnogim oblicima. U C ++-u imamo dvije vrste polimorfizma:
(i) Polimorfizam kompilacije
U polimorfizmu tijekom kompajliranja postižemo mnoge oblike preopterećenjem. Stoga imamo preopterećenje operatora i preopterećenje funkcije. (Ovo smo već pokrili gore)
(ii) Polimorfizam tijekom izvođenja
Ovo je polimorfizam za klase i objekte. Općenita je ideja da osnovnu klasu može naslijediti nekoliko klasa. Pokazivač osnovne klase može ukazivati na svoju podređenu klasu, a niz osnovne klase može pohraniti različite objekte podređene klase.
To znači, da objekt različito reagira na isti poziv funkcije. Ova vrsta polimorfizma može se koristiti mehanizmom virtualne funkcije.
P # 62) Što su virtualne funkcije?
Odgovor: Virtualna funkcija omogućuje izvedenim razredima da zamijene implementaciju koju pruža osnovna klasa.
Kad god imamo funkcije s istim imenom u bazi kao i izvedena klasa, pojavljuje se nejasnoća kada pokušavamo pristupiti objektu podređene klase pomoću pokazivača osnovne klase. Kako koristimo pokazivač osnovne klase, pozvana funkcija je funkcija osnovne klase s istim imenom.
Da bismo ispravili ovu dvosmislenost, koristimo ključnu riječ 'virtual' prije prototipa funkcije u osnovnoj klasi. Drugim riječima, ovu polimorfnu funkciju činimo virtualnom. Korištenjem virtualne funkcije možemo ukloniti dvosmislenost i ispravno pristupiti svim funkcijama podređene klase pomoću pokazivača osnovne klase.
P # 63) Navedite primjer polimorfizma / virtualnih funkcija tijekom izvođenja.
Odgovor:
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; coutU gornjem kodu, klasa SHAPE ima čisto virtualnu funkciju i apstraktna je klasa (ne može se instancirati). Svaka klasa izvedena je iz SHAPE koji na svoj način implementira funkciju Draw ().
Nadalje, svaka je funkcija Crtanja virtualna, tako da kada se svaki put koristimo pokazivačem osnovne klase (SHAPE) s objektom izvedenih klasa (Krug i KVADRAT), tada se pozivaju odgovarajuće funkcije Crtanje.
P # 64) Što mislite pod izrazom Čiste virtualne funkcije?
Odgovor: Funkcija čistog virtualnog člana je funkcija člana u kojoj osnovna klasa prisiljava izvedene klase na nadjačavanje. Ova funkcija člana obično nema implementaciju. Čiste virtualne funkcije izjednačene su s nulom.
Primjer:
class Shape { public: virtual void draw() = 0; };
Osnovna klasa koja ima čistu virtualnu funkciju kao svog člana može se nazvati 'apstraktnom klasom'. Ova se klasa ne može instancirati i ona obično djeluje kao nacrt koji ima nekoliko podrazreda s daljnjom implementacijom.
P # 65) Što su virtualni konstruktori / destruktori?
Odgovor:
Virtualni destruktori: Kada koristimo pokazivač osnovne klase koji pokazuje na izvedeni objekt klase i koristimo ga za njegovo uništavanje, tada se umjesto pozivanja destruktora izvedene klase poziva destruktor osnovne klase.
Primjer:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Kao što je prikazano u gornjem primjeru, kada kažemo izbrisati a, destruktor se poziva, ali zapravo je to destruktor osnovne klase. To dovodi do dvosmislenosti da se sva memorija koju drži b neće pravilno očistiti.
Ovaj se problem može riješiti korištenjem koncepta 'Virtual Destructor'.
Ono što radimo je da konstruktor osnovne klase napravimo “Virtualnim” tako da svi destruktori podređene klase postanu virtualni i kada izbrišemo objekt osnovne klase koji pokazuje na objekt izvedene klase, poziva se odgovarajući destruktor i svi objekti su pravilno izbrisani.
To je prikazano na sljedeći način:
kako otvoriti .key datoteku na Windows 10
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Virtualni graditelj : Konstruktori ne mogu biti virtualni. Deklariranje konstruktora kao virtualne funkcije sintaksna je pogreška.
Prijatelju
P # 66) Što je funkcija prijatelja?
Odgovor: C ++ klasa ne dopušta pristup njezinim privatnim i zaštićenim članovima izvan klase. Ali ovo se pravilo može prekršiti korištenjem ' Prijatelju ”Funkcija.
Kao što i samo ime govori, funkcija prijatelja je vanjska funkcija koja je prijatelj klase. Da bi funkcija prijatelja mogla pristupiti privatnim i zaštićenim metodama klase, trebali bismo imati prototip funkcije prijatelja s ključnom riječi 'prijatelj' koja je uključena u razred.
P # 67) Što je razred prijatelja?
Odgovor: Razredi prijatelja koriste se kada moramo nadjačati pravilo za osobne i zaštićene specifikatore pristupa kako bi dvije klase mogle usko surađivati.
Stoga možemo imati razred prijatelja da budemo prijatelji drugog razreda. Na ovaj način predavanja prijatelja mogu zadržati privatne, nepristupačne stvari onakvima kakve jesu.
Kada imamo zahtjev za pristup internoj implementaciji klase (privatni član) bez izlaganja detalja objavljivanjem javnosti, idemo na funkcije prijatelja.
Napredni C ++
Predlošci
P # 68) Što je predložak?
Odgovor: Predlošci omogućuju stvaranje funkcija koje su neovisne o tipu podataka (generičke) i mogu uzeti bilo koji tip podataka kao parametre i povratnu vrijednost bez potrebe za preopterećenjem funkcije svim mogućim vrstama podataka. Predlošci gotovo ispunjavaju funkcionalnost makronaredbe.
Njegov prototip je bilo koji od sljedećih:
predložak identificirati > izjava_funkcije;
predložak identificirati > izjava_funkcije;
Jedina razlika između oba prototipa je upotreba klase ključne riječi ili naziva tipa. Njihova osnovna funkcionalnost da budu generički ostaje ista.
Rukovanje iznimkama
P # 69) Što je rukovanje iznimkama? Podržava li C ++ rukovanje iznimkama?
Odgovor: Da, C ++ podržava rukovanje iznimkama.
Ne možemo osigurati da se kôd u svakom trenutku normalno izvršava. Mogu biti određene situacije koje bi mogle prisiliti kôd koji smo napisali da ne radi, iako je bez pogrešaka. Nazvan je ovaj neispravan rad koda Iznimka .
Kada se dogodi iznimka, prevodilac je mora baciti kako bismo znali da je došlo do iznimke. Kada se izuzme izuzetak, prevoditelj mora osigurati da se njime pravilno rukuje, tako da se tok programa nastavlja ili pravilno završava. To se naziva postupanje s iznimkom.
Tako u C ++ imamo tri ključne riječi tj. probati , bacanje i ulov koji su u rukovanju iznimkama.
Općenita sintaksa za blok iznimke je:
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
Kao što je gore prikazano, kôd koji bi mogao imati kvar stavlja se pod blok try. Kada kôd ne radi, pojavljuje se iznimka. Ta se iznimka zatim hvata ispod bloka catch i obrađuje se, tj. Poduzimaju se odgovarajuće mjere.
P # 70) Komentirajte C ++ standardne iznimke?
Odgovor: C ++ podržava neke standardne iznimke koje se mogu uhvatiti ako kôd stavimo u blok try. Te su iznimke dio osnovne klase “ std :: iznimka ”. Ova je klasa definirana u zaglavnoj datoteci C ++.
Nekoliko primjera izuzetaka koje podržava ova klasa uključuju:
bad_alloc - bacio 'novi'
runtime_error - bačena zbog runtime pogrešaka
bad_typeid - dobacuje tip id
Uvod u knjižnicu standardnih predložaka
P # 71) Što je standardna biblioteka predložaka (STL)? Koje su razne vrste STL spremnika?
Odgovor: Standardna knjižnica predložaka (STL) je knjižnica predložaka spremnika koju je odobrio ANSI odbor za uključivanje u standardnu specifikaciju C ++. Imamo razne vrste STL spremnika, ovisno o tome kako pohranjuju elemente.
- Red čekanja, Stack - To su isti kao i tradicionalni red i hrpa i nazivaju se prilagodljivim spremnicima.
- Set, Map - To su u osnovi spremnici koji imaju parove ključ / vrijednost i asocijativne su prirode.
- Vector, i - Oni su sekvencijalne prirode i imaju sličnosti s nizovima.
P # 72) Što je klasa Iterator?
Odgovor: U C ++-u klasa spremnika je zbirka različitih objekata.
Ako trebamo prelaziti kroz ovu zbirku objekata, ne možemo to učiniti pomoću jednostavnih indeksnih varijabli. Stoga imamo posebnu nastavu u STL-u koja se zove Iterator klase koja se može koristiti za prelazak kroz sadržaj klase spremnika.
Razne kategorije iteratora uključuju ulazni iteratori, izlazni iteratori, forward iteratori, dvosmjerni iteratori, nasumični pristup itd.
P # 73) Koja je razlika između vanjskog i iteratora? Opišite prednost Vanjskog Iteratora.
Odgovor: Unutarnji iterator implementiran je s funkcijama člana klase kroz koje treba proći kroz stavke.
Vanjski iterator implementiran je kao zasebna klasa koja se može povezati s objektom koji ima stavke kroz koje treba proći. Osnovna prednost vanjskog iteratora je u tome što je jednostavan za implementaciju jer je implementiran kao zasebna klasa.
Drugo, budući da je riječ o drugoj klasi, mnogi iteratorski objekti mogu biti istovremeno aktivni.
Daljnje čitanje => C # pitanja za intervju
Zaključak
U ovom su članku pokrivene gotovo sve glavne teme programiranja i programiranja na C ++.
Nadamo se da će se bilo koji kandidat osjećati opušteno nakon pripreme za intervju pomoću ove serije intervjua.
Sve najbolje za vaš intervju !!
Preporučena literatura
- Intervjuirajte pitanja i odgovore
- Pitanja i odgovori za ispitivanje ETL-a
- Neka nezgodna ručna ispitivanja Pitanja i odgovori
- 25 najboljih agilnih testova za pitanja i odgovore na intervjue
- Spock intervju pitanja s odgovorima (najpopularnije)
- Neka zanimljiva pitanja za ispitivanje softverskog testiranja
- Top 20+ .NET intervjua s pitanjima i odgovorima
- Top 32 najbolja pitanja i odgovori za intervju za datastage