top 70 c interview questions
Ofte stilte grunnleggende og avanserte C ++ intervjuspørsmål med kodeeksempler for inngangskandidater så vel som erfarne fagpersoner:
Denne detaljerte artikkelen vil helt sikkert være et bokmerke for de som forbereder seg på et C ++ - intervju.
Nesten alle hovedtemaene i C ++ er dekket her sammen med noen grunnleggende spørsmål om avanserte emner som Standardmalbibliotek (STL), etc.
Dette settet med C ++ - kodingsspørsmål vil hjelpe deg med å møte ethvert C ++ - intervju trygt og fjerne det vellykket ved første forsøk.
Hva du vil lære:
- C ++ intervjuspørsmål med kodeeksempler
C ++ intervjuspørsmål med kodeeksempler
Nedenfor er de mest populære C ++ programmeringsintervjuspørsmålene som blir besvart av en C ++ - ekspert.
Les også => Topp C programmeringsintervju spørsmål
Grunnleggende C ++
Struktur av C ++ - programmet
Q # 1) Hva er den grunnleggende strukturen til et C ++ - program?
Svar: Den grunnleggende strukturen til et C ++ - program er vist nedenfor:
#include int main() { cout<<”Hello,World!”; return 0; }
Den første linjen som begynner med “ # ' er en preprosessor-direktivet . I dette tilfellet bruker vi inkludere som et direktiv som forteller kompilatoren å ta med en topptekst mens “ iostream.h ”Som vil bli brukt til grunnleggende inngang / utgang senere i programmet.
Den neste linjen er 'hoved' -funksjonen som returnerer et helt tall. Hovedfunksjonen er startpunktet for utførelse for ethvert C ++ - program. Uansett posisjon i kildekodefilen, blir innholdet i hovedfunksjonen alltid utført først av C ++ kompilatoren.
I neste linje kan vi se åpne krøllete bukseseler som indikerer starten på en blokk med kode. Etter dette ser vi programmeringsinstruksjonen eller kodelinjen som bruker tellingen som er standard utgangsstrøm (definisjonen er til stede i iostream.h).
Denne utgangsstrømmen tar en streng med tegn og skriver den ut til en standard utdataenhet. I dette tilfellet er det 'Hello, World!'. Vær oppmerksom på at hver C ++ instruksjon slutter med semikolon (;), noe som er veldig nødvendig, og å utelate det vil resultere i kompileringsfeil.
Før du lukker bukseseler}, ser vi en annen linje 'return 0;'. Dette er returpunktet til hovedfunksjonen.
Hvert C ++ - program vil ha en grunnleggende struktur som vist ovenfor med et forprosessordirektiv, hovedfunksjonserklæring etterfulgt av en blokk med kode og deretter et returpunkt til hovedfunksjonen som indikerer vellykket gjennomføring av programmet.
Q # 2) Hva er kommentarene i C ++?
Svar: Kommentarer i C ++ er ganske enkelt et stykke kildekode som ignoreres av kompilatoren. De er bare nyttige for en programmerer å legge til en beskrivelse eller tilleggsinformasjon om kildekoden.
I C ++ er det to måter å legge til kommentarer:
- // enkeltlinjekommentar
- / * blokker kommentar * /
Den første typen vil forkaste alt etter at kompilatoren møter “//”. I den andre typen forkaster kompilatoren alt mellom “/ *” og “* /”.
Variabler, datatyper og konstanter
Q # 3) Forskjell mellom erklæring og definisjon av en variabel.
Svar: Erklæringen til en variabel spesifiserer bare datatypen til en variabel og variabelnavnet. Som et resultat av erklæringen, ber vi kompilatoren om å reservere plass til en variabel i minnet i henhold til den spesifiserte datatypen.
Eksempel:
int Result; char c; int a,b,c;
Alt ovenfor er gyldige erklæringer. Vær også oppmerksom på at verdien av variabelen som et resultat av erklæringen ikke er bestemt.
Mens en definisjon er en implementering / instantiering av den deklarerte variabelen hvor vi binder passende verdi til den deklarerte variabelen slik at linkeren vil være i stand til å knytte referanser til de aktuelle enhetene.
Fra eksempelet ovenfor ,
Resultat = 10;
C = ‘A’;
Dette er gyldige definisjoner.
Q # 4) Kommentar til lokalt og globalt omfang av en variabel.
Svar: Omfanget av en variabel er definert som omfanget av programkoden der variabelen forblir aktiv, dvs. den kan deklareres, defineres eller jobbes med.
Det er to typer omfang i C ++:
- Lokalt omfang: En variabel sies å ha et lokalt omfang eller er lokal når den blir erklært i en kodeblokk. Variabelen forblir aktiv bare inne i blokken og er ikke tilgjengelig utenfor kodeblokken.
- Globalt omfang: En variabel har et globalt omfang når den er tilgjengelig gjennom hele programmet. En global variabel blir erklært på toppen av programmet før alle funksjonsdefinisjonene.
Eksempel:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
Q # 5) Hva har forrang når det er en global variabel og en lokal variabel i programmet med samme navn?
Svar: Når det er en lokal variabel med samme navn som den for en global variabel, gir kompilatoren den lokale variabelen forrang.
Eksempel:
#include int globalVar = 2; int main() { int globalVar = 5; cout<Resultatet av koden ovenfor er 5. Dette er fordi, selv om begge variablene har samme navn, har kompilatoren foretrukket det lokale omfanget.
Q # 6) Når det er en global variabel og en lokal variabel med samme navn, hvordan får du tilgang til den globale variabelen?
Svar: Når det er to variabler med samme navn, men forskjellige omfang, dvs. den ene er en lokal variabel og den andre er en global variabel, vil kompilatoren foretrekke en lokal variabel.
For å få tilgang til den globale variabelen bruker vi en “ omfangsoppløsningsoperatør (: :) ”. Ved hjelp av denne operatøren kan vi få tilgang til verdien av den globale variabelen.
Eksempel:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< Produksjon:
Global variabel x = 10
lokal variabel x = 2
Q # 7) Hvor mange måter er det å initialisere en int med en Constant?
Svar: Det er to måter:
- Det første formatet bruker tradisjonell C-notasjon.
int resultat = 10; - Det andre formatet bruker konstruktørnotasjonen.
int resultat (10);
Konstanter
Q # 8) Hva er en konstant? Forklar med et eksempel.
Svar: En konstant er et uttrykk som har en fast verdi. De kan deles inn i heltall, desimal, flytende punkt, tegn eller strengkonstanter avhengig av datatype.
Bortsett fra desimaler støtter C ++ også to flere konstanter, dvs. oktale (til basen 8) og heksadesimale (til basen 16) konstanter.
Eksempler på konstanter:
- 75 // heltall (desimal)
- 0113 // oktal
- 0x4b // heksadesimal
- 3.142 // flytepunkt
- ‘C’ // karakterkonstant
- “Hei, verden” // strengkonstant
Merk: Når vi må representere et enkelt tegn, bruker vi enkelt anførselstegn, og når vi vil definere en konstant med mer enn ett tegn, bruker vi dobbelt anførselstegn.
Sp # 9) Hvordan definerer / erklærer du konstanter i C ++?
Svar: I C ++ kan vi definere våre egne konstanter ved hjelp av #definere preprosessor-direktivet.
#define Identifier value
Eksempel:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< Produksjon: Område av en sirkel = 78,55
Som vist i eksemplet ovenfor, når vi definerer en konstant ved hjelp av #define-direktivet, kan vi bruke den gjennom hele programmet og erstatte verdien.
Vi kan erklære konstanter i C ++ ved å bruke ' konst ”Nøkkelord. Denne måten ligner på å erklære en variabel, men med et const-prefiks.
Eksempler på å erklære en konstant
const int pi = 3.142;
const char c = “sth”;
const postnummer = 411014;
I eksemplene ovenfor, når typen konstant ikke er spesifisert, vil C ++ kompilatoren standardinnstille den til et heltall.
Operatører
Q # 10) Kommentar til Assignment Operator i C ++.
Svar: Oppdragsoperatør i C ++ brukes til å tilordne en verdi til en annen variabel.
a = 5;
Denne kodelinjen tilordner heltallverdien 5 til variabel til .
Delen til venstre for = operatoren er kjent som en verdi (venstre verdi) og høyre som verdi (riktig verdi). L verdi må alltid være en variabel, mens høyre side kan være en konstant, en variabel, resultatet av en operasjon eller en hvilken som helst kombinasjon av dem.
Oppdragsoperasjonen foregår alltid fra høyre til venstre og aldri omvendt.
En egenskap som C ++ har over de andre programmeringsspråkene er at oppdragsoperatøren kan brukes som verdi (eller en del av en verdi ) for en annen oppgave.
Eksempel:
a = 2 + (b = 5);
tilsvarer:
b = 5;
a = 2 + b;
Hvilket betyr, først tilordne 5 til variabel b og tilordne deretter til til, verdien to pluss resultatet av forrige uttrykk for b (altså 5), blader til med en sluttverdi på 7 .
Dermed er følgende uttrykk også gyldig i C ++:
a = b = c = 5;
tilordne 5 til variabler til , b og c .
Sp # 11) Hva er forskjellen mellom lik (==) og Oppdragsoperatør (=)?
Svar: I C ++, lik (==) og oppdragsoperatør (=), er to helt forskjellige operatorer.
Lik (==) er en likhetsrelasjonsoperatør som evaluerer to uttrykk for å se om de er like, og returnerer sant hvis de er like og falske hvis de ikke er det.
Oppdragsoperatøren (=) brukes til å tilordne en verdi til en variabel. Derfor kan vi ha en kompleks oppgaveoperasjon inne i forholdet om likestilling for evaluering.
Q # 12) Hva er de forskjellige aritmetiske operatørene i C ++?
Svar: C ++ støtter følgende regneoperatører:
- + tillegg
- - subtraksjon
- * multiplikasjon
- / divisjon
- % modul
La oss demonstrere de forskjellige regneoperatørene med følgende kode.
Eksempel:
#include int main () { int a=5, b=3; cout<<”a + b = “< Produksjon :
a + b = 8
a - b = 2
a * b = 15
a / b = 2
a% b = 1
Som vist ovenfor er alle de andre operasjonene greie og de samme som faktiske aritmetiske operasjoner, bortsett fra moduloperatoren som er ganske annerledes. Modulo-operatøren deler a og b, og resultatet av operasjonen er resten av divisjonen.
Q # 13) Hva er de forskjellige sammensatte oppdragsoperatørene i C ++?
Svar: Følgende er sammensatte tildelingsoperatører i C ++:
+ =, - =, * =, / =,% =, >> =,<<=, &=, ^=,|=
Sammensatt tildelingsoperatør er en av de viktigste funksjonene i C ++ språk som lar oss endre verdien til en variabel med en av de grunnleggende operatorene:
Eksempel:
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;
Q # 14) Oppgi forskjellen mellom operasjoner før og etter økning / nedgang.
Svar: C ++ tillater to operatorer, dvs. ++ (inkrement) og - (decrement), som lar deg legge 1 til den eksisterende verdien av en variabel og trekke 1 fra henholdsvis variabelen. Disse operatørene kalles i sin tur inkrement (++) og decrement (-).
Eksempel:
a = 5;
a ++;
Den andre setningen, a ++, vil føre til at 1 legges til verdien av a. Dermed tilsvarer a ++
a = a + 1; eller
a + = 1;
Et unikt trekk ved disse operatørene er at vi kan prefiks eller suffiks til disse operatorene med variabelen. Derfor, hvis a er en variabel, og vi prefikser økningsoperatoren, vil den være
++ a;
Dette kalles Pre-increment. På samme måte har vi også dekrement.
Hvis vi prefikser variabelen a med en økningsoperator, vil vi ha,
a ++;
Dette er etterøkningen. På samme måte har vi også etterdekrement.
Forskjellen mellom betydningen av pre og post avhenger av hvordan uttrykket evalueres og resultatet lagres.
I tilfelle av operasjonen før inkrement / decrement, utføres inkrement / decrement-operasjonen først, og deretter overføres resultatet til en verdi. Mens operasjoner etter inkrement / decrement evalueres lvaluen først, og deretter utføres increment / decrement tilsvarende.
Eksempel:
a = 5; b = 6;
++ a; # a = 6
b–; # b = 6
-en; # a = 5
b ++; # 6
I / O gjennom konsoll
Sp # 15) Hva er ekstraksjons- og innsettingsoperatorene i C ++? Forklar med eksempler.
Svar: I iostream.h-biblioteket til C ++, Kina , og koste er de to datastrømmene som brukes til henholdsvis input og output. Cout blir normalt dirigert til skjermen og cin er tildelt tastaturet.
“Cin” (utvinningsoperatør): Ved å bruke overbelastet operatør >> med cin-strøm, håndterer C ++ standardinngangen.
int age; cin>>age;
Som vist i eksemplet ovenfor, erklæres en heltallvariabel 'alder' og deretter venter den på cin (tastatur) for å legge inn dataene. “Cin” behandler bare inngangen når du trykker på RETURN-tasten.
“Cout” (innsettingsoperatør): Dette brukes sammen med overbelastet<< operator. It directs the data that followed it into the cout stream.
Eksempel:
lastløperverktøy for ytelsestesting
cout<<”Hello, World!”; cout<<123;
Kontrollstrukturer og funksjoner
Kontrollstrukturer og løkker
Spørsmål nr. 16) Hva er forskjellen mellom mens og gjør mens sløyfe? Forklar med eksempler.
Svar: Formatet for while loop i C ++ er:
Mens (uttrykk)
{uttalelser;}
Uttalelsesblokken under while utføres så lenge tilstanden i det gitte uttrykket er sant.
Eksempel:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<I den ovennevnte koden vil sløyfen gå ut direkte hvis n er 0. Dermed i mens sløyfen er avslutningsbetingelsen i begynnelsen av sløyfen, og hvis den oppfylles, utføres ingen iterasjoner av sløyfen.
Deretter vurderer vi gjør-mens-sløyfen.
Det generelle formatet for do-while er:
gjør {uttalelse;} mens (tilstand);
Eksempel:
#include int main() { int n; cout<>n; do { cout<I koden ovenfor kan vi se at utsagnet inne i sløyfen utføres minst en gang ettersom sløyfetilstanden er på slutten. Dette er de viktigste forskjellene mellom mens og gjør-mens.
I tilfelle av mens sløyfen, kan vi gå ut av sløyfen direkte i begynnelsen, hvis betingelsen ikke er oppfylt, mens vi i gjør-mens sløyfen utfører sløyfesetningene minst en gang.
Funksjoner
Sp # 17) Hva mener du med 'ugyldig' returtype?
Svar: Alle funksjoner skal returnere en verdi i henhold til den generelle syntaksen.
I tilfelle, hvis vi ikke vil at en funksjon skal returnere noen verdi, bruker vi ' tomrom ”For å indikere det. Dette betyr at vi bruker “ tomrom ”For å indikere at funksjonen ikke har noen returverdi eller den returnerer“ tomrom ”.
Eksempel:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
Q # 18) Forklar Pass by Value og Pass by Reference.
Svar: Mens vi sender parametere til funksjonen ved hjelp av 'Pass by Value', sender vi en kopi av parametrene til funksjonen.
Derfor endres ikke alle modifikasjoner som gjøres til parametrene i den ringte funksjonen tilbake til anropsfunksjonen. Dermed forblir variablene i anropsfunksjonen uendret.
Eksempel:
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 = “< Produksjon:
x = 1
y = 3
z = 4
Som sett ovenfor, selv om parametrene ble endret i den kallte funksjonen, ble ikke verdiene deres reflektert i anropsfunksjonen ettersom de ble sendt av verdi.
Imidlertid, hvis vi ønsker å få de endrede verdiene fra funksjonen tilbake til anropsfunksjonen, så bruker vi teknikken 'Pass by Reference'.
For å demonstrere dette endrer vi programmet ovenfor:
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 = “< Produksjon:
x = 2
y = 6
z = 8
Som vist ovenfor overføres modifikasjonene som gjøres til parametrene i de kallte funksjonene til anropsfunksjonen når vi bruker teknikken 'Pass by reference'. Dette er fordi vi ved å bruke denne teknikken ikke overfører en kopi av parametrene, men vi overfører faktisk selve variabelens referanse.
Q # 19) Hva er standardparametere? Hvordan blir de evaluert i C ++ - funksjonen?
Svar: Standardparameter er en verdi som tildeles hver parameter mens deklarerer en funksjon.
Denne verdien brukes hvis parameteren blir tom mens du ringer til funksjonen. For å spesifisere en standardverdi for en bestemt parameter, tilordner vi ganske enkelt en verdi til parameteren i funksjonserklæringen.
Hvis verdien ikke overføres for denne parameteren under funksjonsanropet, bruker kompilatoren standardverdien som er oppgitt. Hvis en verdi er spesifisert, tråkkes denne standardverdien og den passerte verdien brukes.
Eksempel:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< Produksjon:
12
6
Som vist i koden ovenfor, er det to anrop for å multiplisere funksjonen. I den første samtalen sendes bare en parameter med en verdi. I dette tilfellet er den andre parameteren standardverdien. Men i den andre samtalen, da begge parameterverdiene overføres, blir standardverdien overstyrt, og den passerte verdien blir brukt.
Q # 20) Hva er en Inline-funksjon i C ++?
Svar: Inline-funksjon er en funksjon som kompileres av kompilatoren som punktet for å ringe funksjonen, og koden erstattes på det punktet. Dette gjør kompilering raskere. Denne funksjonen er definert ved å prefiksere funksjonsprototypen med nøkkelordet 'inline'.
Slike funksjoner er bare fordelaktige når koden til den innebygde funksjonen er liten og enkel. Selv om en funksjon er definert som Inline, er den helt avhengig av kompilator å evaluere den som inline eller ikke.
Avansert datastruktur
Arrays
Spørsmål nr. 21) Hvorfor blir matriser vanligvis behandlet med for loop?
Svar: Array bruker indeksen til å krysse hvert av elementene.
Hvis A er en matrise, får du tilgang til hvert av elementene som A (i). Programmatisk er alt som kreves for at dette skal fungere en iterativ blokk med en sløyfevariabel i som fungerer som en indeks (teller) som øker fra 0 til A. lengde-1.
Dette er nøyaktig hva en sløyfe gjør, og dette er grunnen til at vi behandler matriser ved hjelp av sløyfer.
Q # 22) Angi forskjellen mellom slett og slett ().
Svar: “Delete ()” brukes til å frigjøre minnet som er tildelt en matrise som ble tildelt ved hjelp av nye (). “Delete” brukes til å frigjøre en mengde minne som ble tildelt ved hjelp av ny.
Spørsmål nr. 23) Hva er galt med denne koden?
T * p = ny T (10);
slett p;
Svar: Ovennevnte kode er syntaktisk riktig og vil kompilere fint.
Det eneste problemet er at det bare vil slette det første elementet i matrisen. Selv om hele matrisen er slettet, vil bare ødeleggeren av det første elementet bli kalt, og minnet for det første elementet frigjøres.
Spørsmål nr. 24) Hva er rekkefølgen objektene i en matrise blir ødelagt?
Svar: Objekter i en matrise blir destruert i omvendt konstruksjonsrekkefølge: Først konstruert, sist destruert.
I det følgende eksemplet, ordren for destruktører vil være en (9), en (8),…, en (1), en (0):
voiduserCode() { Car a(10); ... }
Pekere
Sp # 25) Hva er galt med denne koden?
T * p = 0;
slett p;
Svar: I koden ovenfor er pekeren en nullpeker. I henhold til C ++ 03-standarden er det helt gyldig å ringe sletting på en NULL-peker. Sletteoperatøren vil ta seg av NULL-kontrollen internt.
Q # 26) Hva er en referansevariabel i C ++?
Svar: En referansevariabel er et aliasnavn for den eksisterende variabelen. Dette betyr at både variabelnavnet og referansevariabelen peker til samme minneplassering. Derfor, når variabelen oppdateres, blir referansen også oppdatert.
Eksempel:
int a=10; int& b = a;
Her er b referansen til a.
Lagringsklasser
Spørsmål nr. 27) Hva er en lagringsklasse? Nevn lagringsklassene i C ++.
Svar: Lagringsklasse bestemmer levetiden eller omfanget av symboler som variabel eller funksjoner.
C ++ støtter følgende lagringsklasser:
- Auto
- Statisk
- Utvendig
- Registrere
- Muterbar
Q # 28) Forklar Mutable Storage class specifier.
Svar: Variabelen til et objekt i et konstant klasseobjekt kan ikke endres. Men ved å erklære variablene som 'mutable', kan vi endre verdiene til disse variablene.
Spørsmål nr. 29) Hva er nøkkelordet auto for?
Svar: Som standard er hver lokale variabel i funksjonen automatisk, dvs. auto . I funksjonen nedenfor er både variablene ‘i’ og ‘j’ automatiske variabler.
void f() { int i; auto int j; }
MERK : En global variabel er ikke en automatisk variabel.
Spørsmål nr. 30) Hva er en statisk variabel?
Svar: En statisk variabel er en lokal variabel som beholder verdien på tvers av funksjonsanropene. Statiske variabler erklæres ved hjelp av nøkkelordet 'statisk'. Numeriske variabler som er statiske har standardverdien som null.
Følgende funksjon vil skrive ut 1 2 3 hvis den kalles tre ganger.
void f() { static int i; ++i; printf(“%d “,i); }
Hvis en global variabel er statisk, er dens synlighet begrenset til samme kildekode.
Spørsmål nr. 31) Hva er formålet med Extern Storage Specifier?
Svar: Spesifikatoren “Ekstern” brukes til å løse omfanget av et globalt symbol.
#include using nam espace std; main() { extern int i; cout< I koden ovenfor kan “i” være synlig utenfor filen der den er definert.
Q # 32) Forklar Register Storage Specifier.
Svar: 'Register' -variabelen skal brukes når variabelen brukes. Når en variabel blir deklarert med en 'register' -spesifikator, gir kompilatoren CPU-register for lagring for å øke oppslaget av variabelen.
Sp # 33) Når skal man bruke 'const' referanse-argumenter i en funksjon?
Svar: Å bruke “const” referanse argumenter i en funksjon er gunstig på flere måter:
- “Const” beskytter mot programmeringsfeil som kan endre data.
- Som et resultat av bruk av 'const', er funksjonen i stand til å behandle både const og non-const faktiske argumenter, noe som ikke er mulig når 'const' ikke brukes.
- Ved å bruke en const-referanse kan funksjonen generere og bruke en midlertidig variabel på en passende måte.
Struktur og brukerdefinerte datatyper
Q # 34) Hva er en klasse?
Svar: Klasse er en brukerdefinert datatype i C ++. Det kan opprettes for å løse en bestemt type problem. Etter opprettelsen er ikke brukeren pålagt å vite detaljene i arbeidet med en klasse.
Generelt fungerer klassen som en blåkopi av et prosjekt og kan inkludere i forskjellige parametere og funksjoner eller handlinger som fungerer på disse parametrene. Disse kalles medlemmene i klassen.
Q # 35) Forskjell mellom klasse og struktur.
Svar:
Struktur: I C-språk brukes strukturen til å pakke forskjellige typer datatyper sammen. Variablene inne i en struktur kalles medlemmene i strukturen. Disse medlemmene er som standard offentlige og kan nås ved å bruke strukturnavnet etterfulgt av en prikkoperatør og deretter medlemsnavnet.
youtube to mp4 converter gratis online uten nedlasting
Klasse: Klassen er en etterfølger av strukturen. C ++ utvider strukturdefinisjonen til å omfatte funksjonene som fungerer på medlemmene. Som standard er alle medlemmene i klassen private.
Objektorientert programmering med C ++
Klasser, konstruktører, destruktører
Q # 36) Hva er Namespace?
Svar: Navneområdet lar oss gruppere et sett med globale klasser, objekter og / eller funksjoner under et bestemt navn.
Det generelle skjemaet for å bruke navnerom er:
namespace identifier {namespace-body}
Hvor identifikator er en hvilken som helst gyldig identifikator, og navneområdet-kroppen er settet med klasser, objekter og funksjoner som er inkludert i navneområdet. Navneplasser er spesielt nyttige i tilfeller der det er mulighet for at mer enn ett objekt har samme navn, noe som resulterer i navnekollisjon.
Spørsmål nr. 37) Hva er bruken av 'bruk' erklæring?
Svar: Bruk av erklæring brukes til å henvise til et navn fra navneområdet uten omfangsoppløsningsoperatøren.
Q # 38) Hva er navnemangling?
Svar: C ++ kompilator koder parametertypene med funksjon / metode til et unikt navn. Denne prosessen kalles navnemangling. Den omvendte prosessen kalles demangling.
Eksempel:
A :: b (int, lang) const er manglet som ‘B__C3Ail’ .
For en konstruktør blir metodenavnet utelatt.
Det er A :: A (int, lang) const er manglet som 'C3Ail'.
Q # 39) Hva er forskjellen mellom et objekt og en klasse?
Svar: Klassen er en blåkopi av et prosjekt eller problem som skal løses og består av variabler og metoder. Disse kalles medlemmene i klassen. Vi har ikke tilgang til metoder eller variabler i klassen alene, med mindre de er erklært statiske.
For å få tilgang til klassemedlemmene og ta dem i bruk, bør vi opprette en forekomst av en klasse som kalles et objekt. Klassen har en ubegrenset levetid, mens et objekt bare har en begrenset levetid.
Q # 40) Hva er de forskjellige tilgangsspesifikatorene i C ++?
Svar: C ++ støtter følgende tilgangsspesifikatorer:
- Offentlig: Datamedlemmer og funksjoner er tilgjengelige utenfor klassen.
- Privat: Datamedlemmer og funksjoner er ikke tilgjengelige utenfor klassen. Unntaket er bruken av en venneklasse.
- Beskyttet: Datamedlemmer og funksjoner er bare tilgjengelige for de avledede klassene.
Eksempel:
Beskriv PRIVAT, BESKYTTET og OFFENTLIG sammen med deres forskjeller og gi eksempler.
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
Q # 41) Hva er en konstruktør, og hvordan kalles den?
Svar: Constructor er en medlemsfunksjon i klassen som har samme navn som klassen. Den brukes hovedsakelig til å initialisere medlemmene i klassen. Som standard er konstruktører offentlige.
Det er to måter som konstruktørene kalles på:
- Implisitt: Konstruktører kalles implisitt av kompilatoren når et objekt av klassen blir opprettet. Dette skaper et objekt på en stabel.
- Eksplisitt samtale: Når objektet til en klasse er opprettet ved hjelp av nye, kalles konstruktører eksplisitt. Dette skaper vanligvis et objekt på en haug.
Eksempel:
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. }
SP # 42) Hva er en KOPIERINGSKONSTRUKTØR, og når kalles den?
Svar: En kopikonstruktør er en konstruktør som aksepterer et objekt av samme klasse som parameteren, og kopierer dataene til objektet til venstre på oppgaven. Det er nyttig når vi trenger å konstruere et nytt objekt av samme klasse.
Eksempel:
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 }
Spørsmål nr. 43) Hva er en standardkonstruktør?
Svar: Standardkonstruktør er en konstruktør som enten ikke har noen argumenter, eller hvis det er noen, så er alle standardargumenter.
Eksempel:
class B { public: B (int m = 0) : n (m) {} int n; }; int main(int argc, char *argv()) { B b; return 0; }
Q # 44) Hva er en Conversion Constructor?
Svar: Det er en konstruktør som godtar ett argument av en annen type. Konverteringskonstruktører brukes hovedsakelig til konvertering fra en type til en annen.
Q # 45) Hva er en eksplisitt konstruktør?
Svar: En konverteringskonstruktør blir erklært med det eksplisitte nøkkelordet. Kompilatoren bruker ikke en eksplisitt konstruktør til å implementere en underforstått konvertering av typer. Formålet er eksplisitt forbeholdt konstruksjon.
Sp # 46) Hva er rollen til det statiske nøkkelordet for en variabel i klassemedlemmet?
Svar: Den statiske medlemsvariabelen deler et felles minne på tvers av alle objektene som er opprettet for den respektive klassen. Vi trenger ikke referere til den statiske medlemsvariabelen ved hjelp av et objekt. Imidlertid kan du få tilgang til den ved hjelp av selve kursnavnet.
Q # 47) Forklar funksjonen for statisk medlem.
Svar: En statisk medlemsfunksjon har kun tilgang til den statiske medlemsvariabelen i klassen. Samme som de statiske medlemsvariablene, kan du også få tilgang til en statisk medlemsfunksjon ved å bruke klassenavnet.
Q # 48) Hva er rekkefølgen de lokale objektene blir ødelagt i?
Svar: Vurder å følge en kode:
Class A{ …. }; int main() { A a; A b; ... }
I hovedfunksjonen har vi to objekter opprettet etter hverandre. De blir opprettet i rekkefølge, først a deretter b. Men når disse objektene blir slettet, eller hvis de går utenfor omfanget, vil destruktoren for hver kalles i omvendt rekkefølge de ble konstruert i.
Derfor vil destruktøren av b kalles først etterfulgt av a. Selv om vi har en rekke objekter, vil de bli ødelagt på samme måte i omvendt rekkefølge av deres skapelse.
Overbelastning
Q # 49) Forklar funksjonsoverbelastning og operatøroverbelastning.
Svar: C ++ støtter OOPs-konseptet polymorfisme, som betyr 'mange former'.
I C ++ har vi to typer polymorfisme, dvs. kompileringstidspolymorfisme og kjøretidspolymorfisme. Kompileringstidspolymorfisme oppnås ved å bruke en overbelastningsteknikk. Overbelastning betyr rett og slett å gi ytterligere mening til en enhet ved å holde dens basisbetydning intakt.
C ++ støtter to typer overbelastning:
Funksjon Overbelastning:
Funksjon overbelastning er en teknikk som lar programmereren ha mer enn én funksjon med samme navn, men annen parameterliste. Med andre ord overbelaster vi funksjonen med forskjellige argumenter, det vil si det er argumenttypen, antall argumenter eller rekkefølgen på argumentene.
Funksjonsoverbelastning oppnås aldri på returtypen.
Overbelastning av operatør:
Dette er nok en annen type kompileringstidspolymorfisme som støttes av C ++. I operatøroverbelastning er en operatør overbelastet, slik at den også kan operere på de brukerdefinerte typene med operandene til standard datatype. Men mens du gjør dette, holdes standarddefinisjonen for den operatøren intakt.
For eksempel, en tilleggsoperator (+) som opererer på numeriske datatyper kan overbelastes for å fungere på to objekter akkurat som et objekt av kompleks tallklasse.
Q # 50) Hva er forskjellen mellom metodeoverbelastning og metodeoverstyring i C ++?
Svar: Metodeoverbelastning er å ha funksjoner med samme navn, men forskjellige argumentlister. Dette er en form for kompileringstidspolymorfisme.
Metodeoverstyring kommer inn i bildet når vi omskriver metoden som er avledet fra en basisklasse. Metodeoverstyring brukes når du arbeider med polymorfisme eller virtuelle funksjoner.
Q # 51) Hva er forskjellen mellom en kopikonstruktør og en overbelastet Oppdragsoperatør?
Svar: En kopikonstruktør og en overbelastet oppdragsoperatør tjener i utgangspunktet det samme formålet, dvs. tilordne innholdet til et objekt til et annet. Men likevel er det en forskjell mellom de to.
Eksempel:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
I eksemplet ovenfor er den andre setningen c1 = c2 en overbelastet tildelingserklæring.
Her er både c1 og c2 allerede eksisterende objekter, og innholdet i c2 er tilordnet objektet c1. Derfor, for overbelastet oppgaveerklæring, må begge objektene allerede opprettes.
Neste uttalelse, kompleks c3 = c2 er et eksempel på kopikonstruktøren. Her tilordnes innholdet i c2 til et nytt objekt c3, noe som betyr at kopikonstruktøren oppretter et nytt objekt hver gang det kjøres.
Q # 52) Navngi operatørene som ikke kan overbelastes.
Svar:
- sizeof - størrelse av operatør
- . - Prikkoperatør
- . * - operatør for dereferanse
- -> - medlem dereferencing operatør
- :: - omfangsoppløsningsoperatør
- ?: - betinget operatør
Q # 53) Funksjonen kan overbelastes basert på parameteren som er en verdi eller en referanse. Forklar om utsagnet er sant.
Svar: Falsk. Både Passing by value og Passing by reference ser identisk ut som den som ringer.
Q # 54) Hva er fordelene med operatøroverbelastning?
Svar: Ved å overbelaste standardoperatører på en klasse, kan vi utvide betydningen av disse operatørene, slik at de også kan operere på de andre brukerdefinerte objektene.
Funksjonsoverbelastning lar oss redusere kodenes kompleksitet og gjøre den mer oversiktlig og lesbar, ettersom vi kan ha de samme funksjonsnavnene med forskjellige argumentlister.
Arv
Sp # 55) Hva er arv?
Svar: Arv er en prosess der vi kan tilegne oss egenskapene til en eksisterende enhet og danne en ny enhet ved å legge til flere funksjoner i den.
Når det gjelder C ++, er arv å skape en ny klasse ved å utlede den fra en eksisterende klasse slik at denne nye klassen har egenskapene til den overordnede klassen så vel som sin egen.
Spørsmål nr. 56) Hva er fordelene med arv?
Svar: Arv tillater kodebrukbarhet, og sparer dermed tid på kodeutvikling.
Ved å arve bruker vi en feilfri programvare av høy kvalitet som reduserer fremtidige problemer.
Spørsmål nr. 57) Støtter C ++ flere arv?
Svar: Ja.
Sp # 58) Hva er flere arv (virtuell arv)? Hva er fordelene og ulempene?
Svar: I flere arvinger har vi mer enn en basisklasse som en avledet klasse kan arve fra. Derfor tar en avledet klasse funksjonene og egenskapene til mer enn en basisklasse.
For eksempel , en klasse sjåfør vil ha to baseklasser, nemlig ansatt og en person fordi en sjåfør er en ansatt så vel som en person. Dette er fordelaktig fordi førerklassen kan arve den ansatte så vel som personklassen.
Men når det gjelder en ansatt og en person, vil klassen ha noen egenskaper til felles. Imidlertid vil en tvetydig situasjon oppstå da førerklassen ikke kjenner til klassene som de felles egenskapene skal arves fra. Dette er den største ulempen ved flere arv.
Q # 59) Forklar klasseforholdet mellom ISA og HASA. Hvordan vil du implementere Hver?
Svar: 'ISA' -forholdet viser vanligvis arv, ettersom det innebærer at en klasse 'ISA' spesialversjon av en annen klasse. For eksempel , En ansatt ISA-person. Det betyr at en medarbeiderklasse er arvet fra personklassen.
I motsetning til “ISA” viser “HASA” -forholdet at en enhet kan ha en annen enhet som medlem eller at en klasse har et annet objekt innebygd i seg.
Så hvis vi tar det samme eksemplet på en ansattklasse, er måten vi forbinder lønningsklassen med den ansatte ikke ved å arve den, men ved å inkludere eller inneholde lønnsobjektet i medarbeiderklassen. 'HASA' -forholdet vises best ved inneslutning eller aggregering.
Sp # 60) Arver en avledet klasse eller arver den ikke?
Svar: Når en avledet klasse er konstruert fra en bestemt basisklasse, arver den i utgangspunktet alle funksjonene og vanlige medlemmer av basisklassen. Men det er noen unntak fra denne regelen. For eksempel arver en avledet klasse ikke baseklassens konstruktører og destruktorer.
Hver klasse har sine egne konstruktører og destruktorer. Den avledede klassen arver heller ikke oppdragsoperatøren til baseklassen og klassens venner. Årsaken er at disse enhetene er spesifikke for en bestemt klasse, og hvis en annen klasse er avledet, eller hvis det er vennen til den klassen, så kan de ikke overføres til dem.
Polymorfisme
Q # 61) Hva er polymorfisme?
Svar: Den grunnleggende ideen bak polymorfisme er i mange former. I C ++ har vi to typer polymorfisme:
(i) Kompileringstidspolymorfisme
I kompileringstidspolymorfisme oppnår vi mange former ved overbelastning. Derfor har vi en operatøroverbelastning og funksjonsoverbelastning. (Vi har allerede dekket dette ovenfor)
(ii) Kjøretids polymorfisme
Dette er polymorfismen for klasser og gjenstander. Generell idé er at en basisklasse kan arves av flere klasser. En pekere i baseklassen kan peke på sin underordnede klasse, og en basisklassmatrise kan lagre forskjellige underordnede klasseobjekter.
Dette betyr at et objekt reagerer annerledes på samme funksjonsanrop. Denne typen polymorfisme kan bruke en virtuell funksjonsmekanisme.
Q # 62) Hva er virtuelle funksjoner?
Svar: En virtuell funksjon lar de avledede klassene erstatte implementeringen som tilbys av basisklassen.
Hver gang vi har funksjoner med samme navn i basen så vel som avledet klasse, oppstår det en tvetydighet når vi prøver å få tilgang til underordnede klasseobjekt ved hjelp av en baseklassepeker. Når vi bruker en baseklassepeker, er funksjonen som kalles baseklassefunksjonen med samme navn.
For å rette opp denne uklarheten bruker vi nøkkelordet “virtuelt” før funksjonsprototypen i basisklassen. Med andre ord gjør vi denne polymorfe funksjonen virtuell. Ved å bruke en virtuell funksjon kan vi fjerne uklarheten, og vi kan få tilgang til alle barneklassefunksjonene riktig ved hjelp av en basisklasspeker.
Q # 63) Gi et eksempel på kjøretidspolymorfisme / virtuelle funksjoner.
Svar:
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; coutI ovennevnte kode har SHAPE-klassen en ren virtuell funksjon og er en abstrakt klasse (kan ikke instantieres). Hver klasse er avledet fra SHAPE som implementerer Draw () -funksjonen på sin egen måte.
Videre er hver tegnefunksjon virtuell, slik at når vi bruker en basisklassepeker (SHAPE) hver gang med objektet til de avledede klassene (sirkel og kvadrat), kalles passende tegnefunksjoner.
Sp # 64) Hva mener du med rene virtuelle funksjoner?
Svar: En ren virtuell medlemsfunksjon er en medlemsfunksjon der basisklassen tvinger de avledede klassene til å overstyre. Normalt har denne medlemsfunksjonen ingen implementering. Rene virtuelle funksjoner er lik null.
Eksempel:
class Shape { public: virtual void draw() = 0; };
Baseklasse som har en ren virtuell funksjon som medlem, kan betegnes som en “abstrakt klasse”. Denne klassen kan ikke instantieres, og den fungerer vanligvis som en blåkopi som har flere underklasser med videre implementering.
Q # 65) Hva er virtuelle konstruktører / destruktører?
Svar:
Virtuelle destruktører: Når vi bruker en baseklassepeker som peker på et avledet klasseobjekt og bruker den til å ødelegge den, blir baseklassedestruktøren kalt i stedet for å kalle den avledede klassedestruktøren.
Eksempel:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Som vist i eksemplet ovenfor, når vi sier slett a, kalles destruktoren, men det er faktisk basisklassedestruktøren. Dette gir opphav til tvetydigheten om at alt minnet som holdes av b ikke blir ryddet ordentlig.
Dette problemet kan løses ved å bruke 'Virtual Destructor' -konseptet.
Det vi gjør er at vi lager baseklasskonstruktøren 'Virtuell' slik at alle barneklassedestruktører også blir virtuelle, og når vi sletter objektet til baseklassen som peker mot objektet til den avledede klassen, kalles den passende destruktoren og alt gjenstandene er riktig slettet.
Dette vises som følger:
åpner .7z filer på mac
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Virtuell byggmester : Konstruktører kan ikke være virtuelle. Å erklære en konstruktør som en virtuell funksjon er en syntaksfeil.
Venn
Q # 66) Hva er en vennfunksjon?
Svar: C ++ klasse tillater ikke tilgang til private og beskyttede medlemmer utenfor klassen. Men denne regelen kan brytes ved å bruke ' Venn ”-Funksjon.
Som navnet selv antyder, er vennefunksjon en ekstern funksjon som er en venn av klassen. For at vennefunksjon skal få tilgang til de private og beskyttede metodene i klassen, bør vi ha en prototype av vennefunksjonen med nøkkelordet 'venn' inkludert i klassen.
Q # 67) Hva er en venneklasse?
Svar: Venneklasser brukes når vi trenger å overstyre regelen for private og beskyttede tilgangsspesifikatorer, slik at to klasser kan samarbeide tett med hverandre.
Derfor kan vi ha en venneklasse for å være en venn av en annen klasse. På denne måten kan venneklasser holde private, utilgjengelige ting slik de er.
Når vi har et krav om å få tilgang til den interne implementeringen av en klasse (privat medlem) uten å avsløre detaljene ved å gjøre publikum, går vi for vennefunksjoner.
Avansert C ++
Maler
Spørsmål nr. 68) Hva er en mal?
Svar: Maler tillater å lage funksjoner som er uavhengige av datatypen (generisk) og kan ta hvilken som helst datatype som parametere og returnere verdi uten å måtte overbelaste funksjonen med alle mulige datatyper. Maler oppfyller nesten funksjonaliteten til en makro.
Prototypen er en av følgende:
mal identifisere > funksjonserklæring;
mal identifisere > funksjonserklæring;
Den eneste forskjellen mellom begge prototypene er bruken av søkeordklasse eller typenavn. Deres grunnleggende funksjonalitet for å være generisk forblir den samme.
Avvikshåndtering
Spørsmål nr. 69) Hva er unntakshåndtering? Støtter C ++ Unntakshåndtering?
Svar: Ja C ++ støtter unntakshåndtering.
Vi kan ikke sikre at koden vil utføres normalt til enhver tid. Det kan være visse situasjoner som kan tvinge feil koden som er skrevet av oss, selv om den er feilfri. Denne feilfunksjonen i koden kalles Unntak .
Når et unntak har skjedd, må kompilatoren kaste det slik at vi vet at et unntak har skjedd. Når et unntak har blitt kastet, må kompilatoren sørge for at det blir håndtert riktig, slik at programflyten fortsetter eller avsluttes ordentlig. Dette kalles håndtering av unntak.
Dermed i C ++ har vi tre nøkkelord, dvs. prøve , kaste og å fange som er i unntakshåndtering.
Den generelle syntaksen for unntaksblokk er:
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
Som vist ovenfor, settes koden som potensielt kan fungere feil, under prøveblokken. Når kode ikke fungerer, kastes et unntak. Dette unntaket fanges deretter opp under fangstblokken og håndteres, dvs. passende tiltak blir tatt.
Q # 70) Kommentar C ++ standard unntak?
Svar: C ++ støtter noen standard unntak som kan fanges hvis vi legger koden i prøveblokken. Disse unntakene er en del av basisklassen “ std :: unntak ”. Denne klassen er definert i C ++ header-filen.
Få eksempler på unntak som støttes av denne klassen inkluderer:
bad_alloc - kastet av ‘ny’
runtime_error - kastet for kjøretidsfeil
bad_typeid - kastet etter type-id
Introduksjon til standard malbibliotek
Spørsmål nr. 71) Hva er et standardmalbibliotek (STL)? Hva er de forskjellige typene STL-containere?
Svar: Et standardmalbibliotek (STL) er et bibliotek med containermaler som er godkjent av ANSI-komiteen for inkludering i standard C ++ -spesifikasjonen. Vi har forskjellige typer STL-containere, avhengig av hvordan de lagrer elementene.
- Kø, stakk - Dette er det samme som tradisjonell kø og stack og kalles adaptive containere.
- Sett, kart - Dette er i utgangspunktet containere som har nøkkel / verdipar og er assosiative.
- Vector, og - Disse er sekvensielle og har likheter med matriser.
Q # 72) Hva er en Iterator-klasse?
Svar: I C ++ er en containerklasse en samling av forskjellige objekter.
Hvis vi trenger å krysse gjennom denne samlingen av objekter, kan vi ikke gjøre det ved hjelp av enkle indeksvariabler. Derfor har vi en spesiell klasse i STL kalt en Iterator klasse som kan brukes til å gå gjennom innholdet i containerklassen.
De forskjellige kategoriene av iteratorer inkluderer input iterators, output iterators, forward iterators, to-directional iterators, random access, etc.
Q # 73) Hva er forskjellen mellom en ekstern Iterator og en Intern Iterator? Beskriv en fordel med den eksterne ikteratoren.
Svar: En intern iterator er implementert med medlemsfunksjoner i klassen som har elementer å gå gjennom.
En ekstern iterator er implementert som en egen klasse som kan bindes til objektet som har elementer å gå gjennom. Den grunnleggende fordelen med en ekstern iterator er at den er enkel å implementere da den implementeres som en egen klasse.
For det andre, siden det er en annen klasse, kan mange iteratorobjekter være aktive samtidig.
Videre lesing => C # Intervju Spørsmål
Konklusjon
Nesten alle de viktigste kodings- og programmeringsemnene i C ++ - intervju er dekket i denne artikkelen.
Vi håper at enhver kandidat vil føle seg avslappet etter å ha forberedt seg på et intervju ved hjelp av denne serien med intervjuspørsmål.
Alt det beste for intervjuet ditt !!
Anbefalt lesing
- Intervju Spørsmål og svar
- ETL Testing Intervju Spørsmål og svar
- Noen vanskelige manuelle testspørsmål og svar
- 25 Beste Agile Testing Intervju Spørsmål og svar
- Spock Intervjuespørsmål med svar (mest populære)
- Noen interessante spørsmål om intervjuer med programvaretesting
- Topp 20+ .NET intervju spørsmål og svar
- Topp 32 beste datastasjonsintervjuspørsmål og svar